У меня есть список (динамический), в котором FIRST LI скрыт, но содержащиеся в нем данные вставляются в заголовок div выше. У меня есть два якоря, которые перемещают список вверх и вниз.
Я пытаюсь сделать так, чтобы пользователь щелкнул, второй элемент списка перемещается в начало списка (и его данные добавляются в заголовок), и фактический LI скрывается. И если пользователь нажимает вниз, последний элемент списка перемещается на передний план (его данные снова добавляются в заголовок, и он скрывается)
Я не могу заставить элементы списка перемещаться по кликам
HTML
<div class="top">
<a href="#" onclick="slide('up')"></a>
<h1 class="mainTitle"></h1>
<a href="#" onclick="slide('down')"></a>
</div>
<ul>
<li><span class="subtitle">Title 1</span></li>/*First div always hidden and data appended to h1*/
<li><span class="subtitle">Title 2</span></li>
<li><span class="subtitle">Title 3</span></li>
<li><span class="subtitle">Title 4</span></li>
<li><span class="subtitle">Title 5</span></li>
</ul>
JQuery
$(document).ready(function () {
$('li:first-child').css('display', 'none');
$('.mainTitle').append($('li:first-child .subtitle').html());
function slide(direction) {
if (direction === 'up') {
$('li:first-child').before($('li:last-child'));
} else {
$('li:last-child').before($('li:first-child'));
}
}
});
Вы не можете вызвать слайд, потому что функция является областью не глобальной. Удалите функцию из готового вызова. Лучшее решение, добавьте события с помощью jQuery, а не в строку.
Решение 1
$(document).ready(function () {
$('li:first-child').css('display', 'none');
$('.mainTitle').append($('li:first-child .subtitle').html());
});
function slide(direction) {
if (direction === 'up') {
$('li:first-child').before($('li:last-child'));
} else {
$('li:last-child').before($('li:first-child'));
}
}
Лучшее решение
$(document).ready(function () {
$('li:first-child').css('display', 'none');
$('.mainTitle').append($('li:first-child .subtitle').html());
function slide(direction) {
if (direction === 'up') {
$('li:first-child').before($('li:last-child'));
} else {
$('li:last-child').before($('li:first-child'));
}
}
$(".top").on("click","a",function(e){
slide( $(this).data("direction") );
e.preventDefault();
});
});
и HTML:
<div class="top">
<a href="#" data-direction="up"></a>
<h1 class="mainTitle"></h1>
<a href="#" data-direction="down"></a>
</div>
Измените inline на jQuery a la ':
$( ".subtitle").click(slide(up););
Или с ванилью JS:
document.getElementById('.subtitle').onmousedown = function() {
slide();
};
Затем удалите функцию слайда из блока jQuery, который вы указали в своем вопросе, и проблемы с областью действия исчезнут.