100 votes

jquery, sélecteur de classe dans l'id

Ci-dessous, comment dois-je sélectionner les éléments qui contiennent la classe my_class dans l'élément avec id = "my_id" ?

Notez que l'élément peut aussi avoir une autre classe, que je ne sélectionne pas.

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

essayait

$("#my_id [class*=my_class ]")

168voto

Arun P Johny Points 151748

Vous pouvez utiliser le sélecteur de classe ainsi que sélecteur de descendants

$("#my_id .my_class")

53voto

doppelgreener Points 2857

Utilisez simplement le sélecteur de classe.

$('#my_id .my_class')

Il importe peu que l'élément ait aussi d'autres classes. Il possède la classe .ma_classe et il se trouve quelque part dans la classe #my_id afin qu'il corresponde à ce sélecteur.

En ce qui concerne les performances

Selon le Documentation sur les performances des sélecteurs jQuery il est plus rapide d'utiliser les deux sélecteurs séparément, comme ceci :

$('#my_id').find('.my_class')

Voici la partie pertinente de la documentation :

Sélecteurs basés sur l'ID

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

En .find() est plus rapide car la première sélection est traitée sans passer par le moteur de sélection Sizzle - les sélections par ID uniquement sont traitées à l'aide de l'approche document.getElementById() qui est extrêmement rapide car il est intégré au navigateur.

Sélection de par ID o par classe seul (entre autres) invoque des fonctions fournies par le navigateur comme document.getElementById() qui sont assez rapides, alors que l'utilisation d'un sélecteur descendant invoque le moteur Sizzle comme mentionné qui, bien que rapide, est plus lent que l'alternative proposée.

13voto

Niks Jain Points 1549

Utilisez toujours

//Super Fast
$('#my_id').find('.my_class'); 

au lieu de

// Fast:
$('#my_id .my_class');

Regardez Règles de performance JQuery .

Également à Jquery Doc

3voto

Pasha Oleynik Points 68

Aussi $( "#container" ).find( "div.robotarm" );
est égal à : $( "div.robotarm", "#container" )

1voto

Thirumalai murugan Points 1835

Je pense que vous demandez de sélectionner uniquement <span class = "my_class">hello</span> cet élément, vous devez faire comme ceci, si je comprends bien votre question c'est la réponse,

$("#my_id [class='my_class']").addClass('test');

<a href="http://jsfiddle.net/Fe5sf/" rel="nofollow">DEMO</a>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X