#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть такой список:
<div class="list"></div>
<div class="list"></div>
<div class="list on"></div>
<div class="list"></div>
... etc
Я получаю общее количество следующим образом:
var count = $('.list').length; // 4 in this case
Но я хочу написать функцию, которая выбирает следующий div со стрелкой вниз, и я не могу понять, как получить следующий div, выбрать его и отменить выбор текущего div. Это то, что у меня есть сейчас, но это не работает:
var visible = $('.list:visible');
var on = $('.list.on:visible');
if (e.keyCode == 40) { // down key
if(on.length == 0) {
visible.first().addClass("on"); // this works
}
else if( // div placement // < count) {
var next = on.next(); // this part doesn't work
on.removeClass("on"); // :(
next.addClass("on"); // :(
}
else { // if its the last div
// do nothing
}
}
Ответ №1:
Вы можете сделать:
if (e.keyCode == 40) { // down key
if(on.length == 0) {
visible.first().addClass("on");
}
else if(on.length amp;amp; on.next("div.list").length > 0) {
var next = on.next("div.list");
on.removeClass("on");
next.addClass("on");
}
else { // if its the last div
// do nothing
}
}
Быстрая демонстрация: http://jsfiddle.net/GL7tA /
Комментарии:
1. Это работает до тех пор, пока вы не введете скрытый элемент в список? jsfiddle.net/GL7tA/1
2. @user2250471 —
:visible
затем используйте селектор3. Я попробовал: видимый селектор. По-видимому, next()/ prev() игнорирует селектор, поэтому он не сработал. В итоге я использовал другой класс для скрытых элементов списка (вместо .hide();) и .nextAll(‘.list:first’).addClass(«on»); чтобы заставить его полностью работать, потому что он все еще глючил. Но ваш ответ указал мне правильный путь, поэтому я отдам вам должное. 🙂
Ответ №2:
Вы можете работать, .index()
чтобы увидеть, какой элемент в данный момент «выбран»:
var $items = $('.list:visible'),
$selectedItem = $items.filter('.on'),
selectedIndex = $items.index($selectedItem);
if (selectedIndex == -1) {
$items.eq(0).addClass('on');
} else if (selectedIndex 1 < $items.length) {
$selectedItem.next().andSelf().toggleClass('on');
}
Ответ №3:
У вас the else if (
частично синтаксическая ошибка, когда вы говорите, что это не работает.
Это не работает, потому else if
что ожидается вычисление условия, но вы даже не закрываете скобки этого if
условия, и при этом вы не открыли скобки для его блока.
Комментарии:
1. Кроме того, попробуйте проверить свой код javascript в консоли javascript, чтобы вы могли увидеть, есть ли у вас синтаксические ошибки, или запустите его в режиме реального времени на веб-странице, чтобы увидеть, работает ли он. Я бы порекомендовал вам блокнот firefox, консоль firebug, консоль chrome dev tools или opera dragonfly