2009-07-11 8 views
2

ummm, probablement un simple ... le code ci-dessous ne fonctionne qu'avec les éléments visibles (show()) comment l'obtenir je sélectionne le premier élément caché à la place?jquery parent caché

Jquery

$(".postSelectedRules").each(function() { 
    $(this).parents("#idruleB-"+$(this).attr("id").substr(8)+":hidden:first").css('background', '#bbbbbb'); 
}); 

Html

<a id="idruleA-1" class="postSelectedRules" href="#">1</a> 
<div class="postStuff"> 
    <div class="postRules"> 
     <span id="idruleB-1" class="postRulesSelect">1</span> 
     <span id="idruleB-2" class="postRulesSelect">2</span> 
    </div> 
</div> 
+0

Juste ajouté le code html pertinent et Jquery mis à jour Je pense que je fais quelque chose de stupide parce que cela ne fonctionne toujours pas .S'il vous plaît noter que lorsque la page charge d'abord la classe "post Stuff "est caché. – EddyR

Répondre

4

Votre code n'a pas beaucoup de sens. Vous recherchez les parents des nœuds correspondants pour le nœud ayant le même ID que le nœud actuel? Les ID doivent être uniques.

Quant à l'exclusion des éléments cachés sous la forme générale serait quelque chose comme:

$(this).parents(":someClass:visible:first").addClass("blah"); 

aussi au lieu de:

css('background', '#bbbbbb'); 

Je recommande fortement 'D en utilisant des classes au lieu si possible. L'ajout et la suppression d'attributs CSS sont problématiques. Les cours sont faciles.

+0

Beaucoup de bons conseils ici dans un emballage simple. Bien placé. – googletorp

0

Vous pouvez le faire avec

$(".postSelectedRules:hidden").each(function() { 
    $(this).parents("#"+$(this).attr("id")).css('background', '#bbbbbb'); 
}); 

Le: caché dans le sélecteur cherche des éléments qui sont cachés.

J'espère que cela aide.

0

Juste pour info ... Vous ne devriez JAMAIS avoir d'ID répété. Vous constaterez que votre code fonctionnera beaucoup plus rapidement si vous vous en assurez. Il serait beaucoup plus logique d'utiliser une classe dans cette situation.

Supposons que vous XHTML est comme ceci:

<div class="someClass" style="display:block;" id="someElement_1"> 
    <div class="postSelectedRules"></div> 
</div> 
<div class="someClass" style="display:none;" id="someElement_2"> 
    <div class="postSelectedRules"></div> 
</div> 
<div class="someClass" style="display:none;" id="someElement_3"> 
    <div class="postSelectedRules"></div> 
</div> 

Vous devez faire cela pour sélectionner « # someElement_3" (le premier élément caché):

$('.someClass:hidden:first').css({backgroundColor:'#bbb'}); 

Je crois que est essentiellement ce que vous J'essaie de faire

Questions connexes