2010-11-13 5 views
1

J'ai cette structure:jQuery - suivant (élément) ne fonctionne pas

<ul> 
    <li> 
    <a> link .. </a> 
    <span> text </span> 
    <ul> 
     ... 
    </ul> 
    </li> 
    ... 

J'ajoute un événement de clic sur les éléments <span> et <a> et je suis en train de sélectionner le <ul> imbriquée à l'aide $(this).next("ul");

Cela fonctionne pour la plage, mais pas pour le lien. Qu'est-ce que je fais mal ici?

Répondre

2

Un gestionnaire de clic sur l'ancre ne verra pas le UL si vous utilisez next pour le saisir, puisque next ne sélectionnera que le lendemain frères et soeurs. Vous pouvez essayer:

$("a").nextAll("ul").hide(); 

ou:

$("a").parent().find("ul").hide(); 

ou:

$("a").siblings("ul").hide(); 
+0

nextAll() fonctionne pour moi, je vous remercie. Mais c'est bizarre que next() accepte des arguments, s'il renvoie quand même l'élément suivant. – Alex

+0

@Alex - l'argument qu'il accepte signifie 'retourner l'élément * très prochain * * seulement si * il correspond au sélecteur passé. C'est extrêmement inintéressant, et cette question a surgi des centaines de fois dans diverses incarnations pour la même raison. – karim79

+0

ah je vois maintenant. merci :) – Alex