jQuery Détermine si une classe correspondante a un identifiant donné

Qu’est-ce que jQuery a id id de l’instruction suivante?

$('#mydiv').hasClass('foo') 

vous pouvez donc donner un nom de classe et vérifier qu’il contient un identifiant fourni.

quelque chose comme:

 $('.mydiv').hasId('foo') 

Vous pouvez faire cuire cette logique dans le sélecteur en combinant plusieurs sélecteurs . Par exemple, nous pourrions cibler tous les éléments avec un identifiant donné, qui ont également une classe particulière:

 $("#foo.bar"); // Matches 

Cela devrait ressembler à quelque chose que vous écrivez en CSS. Notez que cela ne s’appliquera pas à tous les éléments #foo (mais il ne devrait y en avoir qu’un), et il ne s’appliquera pas à tous les éléments .bar (bien qu’il y en ait peut-être beaucoup). Il ne référencera que les éléments qualifiés sur les deux atsortingbuts.

jQuery a également une excellente méthode .is qui vous permet de déterminer si un élément possède certaines qualités. Vous pouvez tester une collection jQuery sur un sélecteur de chaîne, un élément HTML ou un autre object jQuery. Dans ce cas, nous allons simplement le vérifier avec un sélecteur de chaîne:

 $(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo' 

J’utiliserais probablement $('.mydiv').is('#foo'); Cela dit, si vous connaissez l’Id, pourquoi ne pas l’appliquer au sélecteur?

mise à jour: désolé mal compris la question, supprimé .has() réponse.

une autre manière alternative, créer le plugin .hasId()

 // the plugin $.fn.hasId = function(id) { return this.attr('id') == id; }; // select first class $('.mydiv').hasId('foo') ? console.log('yes') : console.log('no'); // select second class // $('.mydiv').eq(1).hasId('foo') // or $('.mydiv:eq(1)').hasId('foo') ? console.log('yes') : console.log('no'); 
  

Disons que vous parcourez des objects DOM et que vous voulez trouver et attraper un élément avec un certain identifiant

 

Vous pouvez soit écrire quelque chose comme trouver

 $('#myDiv').find('#bar') 

Notez que si vous utilisez un sélecteur de classe, la méthode find renvoie tous les éléments correspondants.

ou vous pourriez écrire une fonction itérative qui fera un travail plus avancé

 
$('#myDiv div').each(function() { if($(this).attr('id') == 'bar1') //do something with bar1 });

Le même code peut être facilement modifié pour le sélecteur de classe.

 
$('#myDiv div').each(function() { if($(this).hasClass('bar')) //do something with bar });

Je suis content que vous ayez résolu votre problème avec index (), ce qui fonctionne pour vous. J’espère que cela aidera les autres avec le même problème. À votre santé 🙂

 $('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ }); 

Juste pour dire que j’ai finalement résolu ce problème en utilisant index ().

Rien d’autre ne semblait fonctionner.

Donc, pour les éléments frères, il s’agit d’un bon travail si vous sélectionnez d’abord une classe commune et que vous souhaitez modifier quelque chose de différent pour une classe spécifique.

EDIT: pour ceux qui ne connaissent pas (comme moi), index () donne une valeur d’index pour chaque élément qui correspond au sélecteur, à partir de 0, en fonction de leur ordre dans le DOM. Tant que vous savez combien d’éléments il y a avec class = “foo” vous n’avez pas besoin d’un identifiant.

Évidemment, cela ne sera pas toujours utile, mais quelqu’un pourrait le trouver utile.

Vérifiez si l’ID de l’élément existe

 if ($('#id').attr('id') == 'id') { //OK } 

Vous pouvez également vérifier si l’élément id est utilisé en procédant ainsi:

 if(typeof $(.div).attr('id') == undefined){ //element has no id } else { //element has id selector } 

J’utilise cette méthode pour les DataTables globaux et les DataTables ordonnés spécifiques