Попробуйте это: http://jsfiddle.net/rsEaF/1/
var $a = $('.sub li > a');
$a.mouseenter(function() {
var index = $a.index(this);
var prev = (index - 1 >= 0) ? $a.eq(index - 1).addClass('prev') : $();
var next = $a.eq(index + 1).addClass('next');
$a.not(prev).not(next).removeClass('prev next');
});
РЕДАКТИРОВАТЬ: Одна небольшая коррекция. Ранее, если вы наведете курсор на первый элемент, класс .prev
будет добавлен к элементу last в списке. Это было исправлено.
РЕДАКТИРОВАТЬ: Вот версия, которая использует .each()
для назначения обработчика. Делать это таким образом немного эффективнее, потому что отпадает необходимость вызывать $a.index(this);
для каждого mouseenter
.
Попробуйте: http://jsfiddle.net/rsEaF/3/
var $a = $('.sub li > a');
$a.each(function(index) {
$(this).mouseenter(function() {
var prev = (index - 1 >= 0) ? $a.eq(index - 1).addClass('prev') : $();
var next = $a.eq(index + 1).addClass('next');
$a.not(prev).not(next).removeClass('prev next');
});
});
РЕДАКТИРОВАТЬ: Если у вас возникли проблемы с последовательным удалением соответствующего класса, избавьтесь от этой строки кода:
$a.not(prev).not(next).removeClass('prev next');
и в начале обработчика замените его на:
$a.removeClass('prev next');
или
$a.filter('.prev,.next').removeClass('prev next');