2010-09-17 2 views
2

нужно выбрать конкретную усадьбу из Jquery элементов на основе там индекс с использованием :eq() (или что-то еще, если у вас есть лучшее решение)выбрать диапазон РОМ элементов на основе индекса

мой HTML структура выглядит следующий образом:

<ul> 
    <li>slide0</li> 
    <li>slide1</li> 
    <li>slide2</li> 
    <li>slide3</li> 
    <li>slide4</li> 
</ul> 

Когда пользователь наводит курсор скользит по Slide2 мне нужно выбрать li:eq(0), li:eq(1) и li:eq(3), li:eq(4) раздельно, потому что они имеют различную анимацию.

Это мое решение, но это чувствует себя немного грязный ...

var $slides, theOthers, slidesTotal; 
$slides = $('ul > li'); 
slidesTotal = $slides.length; 
theOthers = function(slideIndex ,slidesTotal){ 
    var before = [], after = [], i=0; 
    while (i<=slideIndex - 1){ 
     before[i] = ":eq(" + i + ")" 
     i++ 
    }; 
    while (i <= slidesTotal) { 
     after[i] = ":eq(" + i + ")" 
     i++ 
    }; 
    return [ before.join(",") , after.join(",") ] 
} 

$slides.mouseenter(function(){ 
    var groups, slideIndex, $that = $(this); 
    slideIndex = $that.index(); 
    groups = theOthers(slideIndex, slidesTotal); 
    $slides.filter(groups[0]).dosomething(); 
    $slides.filter(groups[1]).dosomethingelse() 
}) 

есть более простой способ сделать это с помощью JQuery?

+0

К сожалению, я не понял ваш вопрос. Удалил мой ответ :-) –

+0

не проблема, это была интересная комбинация селекторов: P, но я уже использовал '$ slides.not ($ (this))' и т. Д. ... и затем выяснил, что мне нужно анимировать элементы до и после seperatly .. – meo

ответ

6

Использование .prevAll() и .nextAll() вы можете уменьшить все вашего код в вопросе сводится к следующему:

$('ul > li').mouseenter(function() { 
    $(this).prevAll().dosomething(); 
    $(this).nextAll().dosomethingelse(); 
}); 

.prevAll() получает все предыдущие брат и сестра, и .nextAll() получает все следующие брат и сестра, вы можете делать то, что вы хотите для каждого набора.

+0

это именно то, что я искал спасибо – meo

+0

@meo - Welcome :) –

0
jQuery('someElm ~ .someClass') 

матчи все элементы .someClass предшествуют ни братьев seomeElm

+0

как бы вы применили это на моем примере? – meo

+0

Ответ на ник: я думаю, решит проблему ур. –

+0

Я знаю, но мне интересно, как ваш подход к моему вопросу. – meo

Смежные вопросы