jQuery: Vérifier si div avec un certain nom de classe existe


235

En utilisant jQuery, je génère par programmation un tas de divcomme ceci:

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

Quelque part ailleurs dans mon code, je dois détecter si ces DIV existent. Le nom de classe pour les divs est le même mais l'ID change pour chaque div. Une idée comment les détecter à l'aide de jQuery?

Réponses:


424

Vous pouvez simplifier cela en vérifiant le premier objet renvoyé par JQuery comme ceci:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

Dans ce cas, s'il existe une valeur véridique au premier [0]index ( ), alors supposez que la classe existe.

Edit 04/10/2013: J'ai créé un cas de test jsperf ici .


Bon point, de toute façon, c'est juste une recherche de propriété. Je ne me soucie pas des quatre personnages, mais cela pourrait être plus clair selon le contexte ...
TJ Crowder

J'ai fini par utiliser cette solution bien qu'il existe d'autres solutions qui fonctionnent aussi. Merci pour les réponses rapides.
avatar

1
Fait intéressant, vous pourriez penser que l' :firstajout d'un module pourrait améliorer les performances (je ne sais pas si les performances sont un critère important pour @itgorilla), mais si cela varie énormément selon le navigateur, probablement parce qu'il modifie les fonctionnalités natives que jQuery peut utiliser pour effectuer la sélection. Voici un cas de test où le div existe , et en voici un où il n'existe pas .
TJ Crowder

Et si je ne veux pas exécuter de code si une classe n'existe pas?
Thomas Sebastian

1
@ThomasSebastian Tryif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

Vous pouvez utiliser size(), mais jQuery vous recommande d'utiliser la longueur pour éviter la surcharge d'un autre appel de fonction:

$('div.mydivclass').length

Alors:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

METTRE À JOUR

La réponse sélectionnée utilise un test de perf, mais elle est légèrement défectueuse car elle inclut également la sélection des éléments dans le cadre de la perf, ce qui n'est pas ce qui est testé ici. Voici un test de perf mis à jour:

http://jsperf.com/check-if-div-exists/3

Ma première exécution du test montre que la récupération de propriété est plus rapide que la récupération d'index, bien que l'OMI soit assez négligeable. Je préfère toujours utiliser la longueur car pour moi, cela a plus de sens quant à l'intention du code plutôt qu'à une condition plus laconique.


3
Selon le lien que vous avez fourni à l'outil sur jsperf.com, .lengthoffre actuellement la meilleure performance moyenne.
gmeben

Répond à mes besoins avec le moindre impact sur les performances pour une vérification.
David O'Regan

77

Sans jQuery:

Le JavaScript natif sera toujours plus rapide. Dans ce cas: (exemple)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

Si vous souhaitez vérifier si un élément parent contient un autre élément avec une classe spécifique, vous pouvez utiliser l'une des options suivantes. (exemple)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

Vous pouvez également utiliser la .contains()méthode sur l'élément parent. (exemple)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

..et enfin, si vous voulez vérifier si un élément donné contient simplement une certaine classe, utilisez:

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
Certes, c'est une alternative, mais coûteuse. Sera plus lent que l'approche utilisée dans les réponses précédentes ( nettement plus lent, sur certains navigateurs), et aura également un impact mémoire beaucoup plus important (jQuery doit créer un tableau de tous les divéléments de la page, puis revenir en arrière et parcourez-les pour voir s'ils ont cette classe, tout pour jeter le tableau à la fin).
TJ Crowder

3
@tj hasClassest 33% plus rapide que les autres sélecteurs ici. Vérifiez jsperf.com/hasclass00
Hussein

1
@Hussein: Seulement avec un cas de test complètement irréaliste (deux divéléments) qui contourne le problème que j'ai mis en évidence (construire le tableau). Essayez-le avec un tas de divs: jsperf.com/hasclass00/2 C'est 63% plus lent sur ma copie de Chrome, 43% plus lent sur ma copie de Firefox, 98% (!) Plus lent sur Opera. Mais de plus, il est logique qu'il soit plus lent de créer une liste de divs puis de la rechercher, plutôt que de donner au moteur de sélection toutes les informations dont il a besoin.
TJ Crowder

1
@Hussein: Notez que j'ai été très impartial et que j'ai présenté des contre-preuves équilibrées à vos affirmations. Je suis désolé si j'ai touché un nerf, cela a semblé se produire la dernière fois aussi. Détendez-vous, ce n'est pas un affront personnel, c'est une discussion technique. Une peau épaisse et un esprit ouvert sont utiles sur StackOverflow.
TJ Crowder

1
@Hussein: Le sélecteur CSS HTML5 signifie que ce sera presque toujours la pire façon de le faire. -1 pour ne pas simplement supprimer votre message.
Stefan Kendall

46

Voici une solution sans utiliser Jquery

var hasClass = element.classList.contains('class name to search');
// hasClass is boolean
if(hasClass === true)
{
     // Class exists
}

lien de référence


1
classList est pris en charge uniquement dans IE10 +: caniuse.com/classlist . Vous devez ajouter un polyfill github.com/eligrey/classList.js ou écrire vos propres méthodes
AFD


10

Pour tester divexplicitement des éléments:

if( $('div.mydivclass').length ){...}


Cela peut être légèrement plus lent qu'en .mydivclassfonction du navigateur et de la version de jQuery.
Stefan Kendall

C'est vrai, mais l'OP a spécifiquement dit "jQuery - vérifiez si div avec un certain nom de classe existe " (mon accent), donc vous obtenez mon vote pour être le premier à inclure réellement la divpartie du sélecteur.
TJ Crowder

7

Le code simple est donné ci-dessous:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

Pour masquer le div avec un identifiant particulier:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

Voici quelques façons:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

Nous pouvons utiliser l'une des méthodes définies par abobe en fonction de l'exigence.


2
if ($(".mydivclass").size()){
   // code here
}

La size()méthode renvoie simplement le nombre d'éléments que le sélecteur jQuery sélectionne - dans ce cas, le nombre d'éléments avec la classe mydivclass. S'il renvoie 0, l'expression est fausse, et donc il n'y en a pas, et s'il renvoie un autre nombre, les div doivent exister.


1
Pourquoi appeler une méthode quand il y a la lengthpropriété? En outre, cela vérifie tout élément avec cette classe, pas seulement un div. (Maintenant, c'est peut-être ce que le PO voulait dire, même si ce n'est pas ce qu'il a dit.) Voir la réponse de Stefan Kendall qui fait ce que le PO a réellement dit (même si, encore une fois, ils ont peut-être voulu dire ce que vous avez fait).
TJ Crowder

1
@TJ Crowder: Eh bien, le goût personnel vraiment - je sens juste que la méthode size () est là - pourquoi ne pas l'utiliser. Le surcoût supplémentaire lors de l'appel d'une fonction (à moins que vous ne le fassiez 1000 fois en boucle) est si minime, je préfère opter pour un peu de clarté dans le code. Sur votre deuxième point - oui, j'ai changé ma réponse d'origine pour supprimer la divpartie, pour deux raisons: 1) le sélecteur n'est pas lié au fait que OP utilise un divélément (il pourrait changer à l'avenir), et 2) dans la plupart des navigateurs et des versions de jQuery, AFAIK, cela devrait être plus rapide.
Herman Schaaf

"Je sens juste que la méthode size () est là - pourquoi ne pas l'utiliser" Um, d'accord. La lengthpropriété est là, pourquoi ne pas l'utiliser? Mais si c'est votre préférence, c'est bon. De l'autre, je ne savais pas que vous l'aviez édité. Si je devais le faire, je l'aurais laissé (encore une fois, il a spécifiquement dit "... si div avec ..." (je souligne) et a ensuite mentionné en outre que si cela n'avait pas d'importance si cela était un divou pas, vous pourriez abandonner cette partie. Mais peu importe. :-)
TJ Crowder

@TJ Crowder: Oui, je pense que nous y pensons trop.
Herman Schaaf

@TJ Crowder: Mais pour ma défense, bien que ce ne soit pas le lieu de la discussion: je pense que la size()méthode est là pour indiquer clairement que vous comptez le nombre d'éléments dans un sélecteur jQuery, et pas n'importe quel ancien tableau. Mais encore une fois, c'est juste ma préférence.
Herman Schaaf

2

vérifier si le div existe avec une certaine classe

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
Semble presque identique à cette réponse existante .
Pang

Oui, c'est vrai ... mais j'ai essayé cette réponse et cela n'a pas fonctionné. Lorsque j'ai ajouté la comparaison à «non défini», cela semblait fonctionner parfaitement.
stairie

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme.
Vishal Chhodwani

2

Dans Jquery, vous pouvez utiliser comme ça.

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

Avec JavaScript

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Voici un exemple de solution pour vérifier la classe (hasClass) en Javascript:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

La meilleure façon en Javascript:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}


0

Utilisez-le pour rechercher toute la page

if($('*').hasClass('mydivclass')){
// Do Stuff
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.