если вы пытаетесь выделить элементы, вы слишком глубоко погрузитесь в дерево DOM, чтобы next
работал правильно. next
получает следующего брата, а a - нет.
a выделено и имеет значение $current
поэтому $next
и $prev
необходимо пройти несколько уровней вверх по дереву DOM, чтобы перейти к истинному следующему a
Таким образом, часть, которая говорит parent().parent().parent()
, идет на соответствующую сумму вверх по структуре DOM. Точно так же, children().children().children()
, чтобы вернуться назад и выделить a.
$("#search-tags").live("keydown", function(e) {
var $prev, $next, $current = $(".pajinate a.highlight");
if (e.which === 40 && !$current.length) {
$(".pajinate li:first a").addClass("highlight");
} else if (e.which === 39) {
$next = $current.parent().parent().parent().next("li");
if ($next.length) {
$current.removeClass("highlight");
$next.children('ul').children('li').children('a').addClass("highlight");
}
} else if (e.which === 37) {
$prev = $current.parent().parent().parent().prev("li");
if ($prev.length) {
$current.removeClass("highlight");
$prev.children('ul').children('li').children('a').addClass("highlight");
}
} else if (e.which === 38) {
$(".pajinate a.highlight").removeClass("highlight");
}
});
скрипка здесь