2010-09-15 12 views
0

je la ligne jquery suivante dans un événement de clic d'un p élément:sélecteur jQuery par classname moins classname

$(this).nextUntil('.Maintheme not:.Document') 

Je voudrais obtenir tous les prochains éléments avec la classe .Maintheme mais pas .Document .

Pour me expliquer un peu mieux, c'est le html que j'ai:

<div id="DocumentContents"> 

<p class="Maintheme">ParentTheme1</p> 
<p class="Document">Document1</p> 
<p class="Maintheme">ParentTheme2</p> 
<p class="Subtheme">SubTheme1</p> 
<p class="Document">Document1</p> 
<p class="Document">Document2</p> 
<p class="Document">Document3</p> 
<p class="Subtheme">SubTheme2</p> 
<p class="Document">Document1</p> 
</div> 

Avoir ce contenu html je voudrais que lorsque vous cliquez sur un élément p s'il n'y a pas sous-thèmes montrent alors les documents. Sinon, s'il y a des sous-thèmes avec les documents ci-dessous, affichez simplement les sous-thèmes, et si vous cliquez dans un sous-thème, affichez les documents suivants.

+0

Utilisez http://jsfiddle.net/ pour jouer ... –

+0

Si vous avez une structure de page comme ça, ce serait sûrement une bonne idée d'utiliser la 'h1' -' h6' rubriques? –

+0

ne pouvez-vous pas faire, '$ ('. Maintheme', '# DocumentContents'). Each (/*..*/)' – RobertPitt

Répondre

0

Quelque chose comme ça?

Exemple:http://jsfiddle.net/ZSCs3/

$('p:not(.Maintheme)').hide(); 

$('.Maintheme').click(function() { 
    var $this = $(this) 
    if ($this.next('.Subtheme').length) { 
     $this.nextUntil('.Maintheme').filter('.Subtheme').toggle(); 
    } else { 
     $this.nextUntil('.Subtheme,.Maintheme').toggle(); 
    } 
}); 

$('.Subtheme').click(function() { 
    $(this).nextUntil('.Subtheme,.Maintheme').toggle(); 
}); 
+0

Incroyable! ... Fonctionne très bien. Je ne connaissais pas la méthode du sélecteur .filter. – Jose3d

0

Vous devez utiliser .nextAll().

var $themes = $(this).nextAll('.Maintheme'); 

Vous devez faire quelques instructions if à partir de là pour créer la logique que vous voulez.

if($themes.length){ 
} 
else{ 
} 

Quoi qu'il en soit, cela me semble étrange. Vous devriez utiliser une liste imbriquée par exemple pour afficher ce genre de structures.

Ref .: .nextAll()

0

Vous n'avez pas la syntaxe correcte mais not tout à fait ce n'est pas clair pour moi exactement ce que vous demandez donc je ne vais pas essayer de le corriger pour vous, il suffit de pointer vous à le reference. Je suis d'accord que cela semble un peu de toute façon.

0

Je pense que le sélecteur not() jQuery est plus approprié pour votre cas puisque le sélecteur nextUntil() arrêtera de regrouper les éléments avec la classe Maintheme à la première occurrence de p tag avec la classe Document. Vous pouvez donc utiliser une tranche de code comme celle-ci:

$ (this) .not (':. Maintheme'). Css (hidePtagsWithDocumentclass);

Questions connexes