2010-09-17 6 views
2

je dois sélectionner une grange spécifique d'éléments jquery basés là-bas index à l'aide :eq() (ou quelque chose d'autre si vous avez une meilleure solution)sélectionner une série d'éléments dom basé sur l'indice

ma structure html est la suivante:

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

Lorsque l'utilisateur passe glisse sur la slide2 je dois sélectionner li:eq(0), li:eq(1) et li:eq(3), li:eq(4) séparemment, parce qu'ils ont une animation différente.

Ceci est ma solution, mais cela se sent un peu en désordre ...

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() 
}) 

est-il un moyen plus simple de le faire avec jQuery?

+0

désolé, j'ai mal compris votre question. Supprimé ma réponse :-) –

+0

pas de problème, c'était une combinaison intéressante de sélecors: P mais j'ai déjà utilisé '$ slides.not ($ (this))' etc ... et puis j'ai découvert que j'avais besoin d'animer les éléments avant et après seperatly .. – meo

Répondre

6

En utilisant .prevAll() et .nextAll() vous pouvez réduire tous les de votre code dans la question à ceci:

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

.prevAll() obtient tous les frères et soeurs précédents, et .nextAll() reçoit tous les frères et sœurs suivants, vous pouvez faire ce que vous voulez à chaque ensemble.

+0

c'est exactement ce que je cherchais merci – meo

+0

@meo - Bienvenue :) –

0
jQuery('someElm ~ .someClass') 

inclut tous les éléments .someClass précédés des frères et sœurs seomeElm

+0

comment appliquez-vous cela sur mon exemple? – meo

+0

La réponse de Nick: Je pense que nous allons résoudre votre problème. –

+0

Je sais, mais je me demande comment le tien correspond à ma question. – meo

Questions connexes