jQuery: controlla se esiste div con un determinato nome di classe


235

Usando jQuery sto generando a livello di codice un sacco di divcome questo:

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

In qualche altra parte del mio codice devo rilevare se esistono questi DIV. Il nome della classe per i div è lo stesso ma l'ID cambia per ogni div. Qualche idea su come rilevarli usando jQuery?

Risposte:


424

Puoi semplificarlo controllando il primo oggetto che viene restituito da JQuery in questo modo:

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

In questo caso, se esiste un valore di verità nel primo [0]indice ( ), allora supponiamo che esista la classe.

Modifica 04/10/2013: ho creato un caso di test jsperf qui .


Un buon punto, in entrambi i casi è solo una ricerca di proprietà. Non mi interessano i quattro personaggi, ma questo potrebbe essere più chiaro a seconda del contesto ...
TJ Crowder,

Ho finito per usare questa soluzione anche se ci sono anche altre soluzioni che funzionano. Grazie per le risposte rapide.
avatar

1
È interessante notare che potresti pensare che dare una mano :firstlì aiuterebbe le prestazioni (non so se le prestazioni sono un criterio importante per @itgorilla), ma se varia in modo selvaggio dal browser, presumibilmente perché cambia le funzionalità native che jQuery può usare per fare il selezione. Ecco un caso di prova in cui il div esiste ed eccone uno in cui non esiste .
TJ Crowder,

E se non volessi eseguire un codice se non esiste una classe?
Thomas Sebastian,

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

117

È possibile utilizzare size(), ma jQuery consiglia di utilizzare la lunghezza per evitare il sovraccarico di un'altra chiamata di funzione:

$('div.mydivclass').length

Così:

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

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

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

AGGIORNARE

La risposta selezionata utilizza un test perf, ma è leggermente imperfetta poiché include anche la selezione degli elementi come parte del perf, che non è ciò che viene testato qui. Ecco un perf test aggiornato:

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

La mia prima esecuzione del test mostra che il recupero delle proprietà è più veloce del recupero dell'indice, sebbene l'IMO sia piuttosto trascurabile. Preferisco ancora usare la lunghezza per me, ha più senso per l'intento del codice piuttosto che una condizione più concisa.


3
Secondo il link fornito allo strumento su jsperf.com, .lengthattualmente offre le migliori prestazioni medie.
gmeben,

Soddisfa le mie esigenze con il minimo impatto sulle prestazioni per un controllo.
David O'Regan,

77

Senza jQuery:

JavaScript nativo sarà sempre più veloce. In questo caso: (esempio)

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

Se si desidera verificare se un elemento padre contiene un altro elemento con una classe specifica, è possibile utilizzare uno dei seguenti. (esempio)

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

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

In alternativa, è possibile utilizzare il .contains()metodo sull'elemento padre. (esempio)

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

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

..e infine, per verificare se un determinato elemento contiene semplicemente una determinata classe, utilizzare:

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

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

3
È vero che questa è un'alternativa, ma costosa. Sarà più lento dell'approccio utilizzato nelle risposte precedenti ( marcatamente più lento, su alcuni browser) e avrà anche un impatto sulla memoria molto più grande (jQuery deve creare un array di tutti gli divelementi sulla pagina, quindi tornare indietro e attraversali per vedere se hanno quella classe, tutti per buttare via l'array alla fine).
TJ Crowder,

3
@tj hasClassè più veloce del 33% rispetto agli altri selettori qui. Controlla jsperf.com/hasclass00
Hussein il

1
@Hussein: solo con un caso di test completamente irrealistico (due divelementi) che affianca il problema stesso che ho evidenziato (costruzione dell'array). Provalo con un sacco di div: jsperf.com/hasclass00/2 È più lento del 63% sulla mia copia di Chrome, del 43% più lento sulla mia copia di Firefox, del 98% (!) Più lento su Opera. Inoltre, ha senso che sia più lento creare un elenco di div e quindi cercarlo, anziché fornire al motore di selezione tutte le informazioni di cui ha bisogno.
TJ Crowder,

1
@Hussein: nota che sono stato molto equilibrato e ho presentato contro-prove bilanciate alle tue affermazioni. Mi dispiace se ho toccato un nervo, anche quello sembrava accadere l'ultima volta. Rilassati, non è un affronto personale, è una discussione tecnica. Una pelle spessa e una mente aperta sono utili su StackOverflow.
TJ Crowder,

1
@Hussein: il selettore css HTML5 significa che questo sarà quasi sempre il peggior modo possibile per farlo. -1 per non aver semplicemente cancellato il tuo post.
Stefan Kendall,


18

È abbastanza semplice ...

if ($('.mydivclass').length > 0) {
  //do something
}

10

Per verificare divesplicitamente gli elementi:

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


Questo potrebbe essere leggermente più lento rispetto a .mydivclassseconda del browser e della versione di jQuery.
Stefan Kendall,

È vero, ma l'OP ha detto espressamente "jQuery - controlla se esiste un div con un determinato nome di classe " (la mia enfasi), quindi ottieni il mio voto per essere il primo a includere effettivamente la divparte del selettore.
TJ Crowder,

7

Di seguito è riportato il codice semplice:

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

Per nascondere il div con ID particuler:

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

3

Ecco alcuni modi:

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.
    }

Possiamo utilizzare uno qualsiasi dei modi definiti in base al requisito.


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

Il size()metodo restituisce semplicemente il numero di elementi che il selettore jQuery seleziona - in questo caso il numero di elementi con la classe mydivclass. Se restituisce 0, l'espressione è falsa e quindi non ce ne sono, e se restituisce qualsiasi altro numero, i div devono esistere.


1
Perché chiamare un metodo quando c'è la lengthproprietà? Inoltre, questo controlla qualsiasi elemento con quella classe, non solo a div. (Ora, potrebbe essere quello che intendeva l'OP, anche se non quello che ha detto.) Vedi la risposta di Stefan Kendall che fa ciò che l'OP ha effettivamente detto (anche se, di nuovo, potrebbero aver significato quello che hai fatto).
TJ Crowder,

1
@TJ Crowder: Beh, il gusto personale davvero - Sento solo che il metodo size () è lì - perché non usarlo. Il sovraccarico extra nel chiamare una funzione (a meno che non lo si faccia 1000 volte in un ciclo) è così minimo, preferirei un po 'di chiarezza nel codice. Sul tuo secondo punto: sì, ho cambiato la mia risposta originale per rimuovere la divparte, per due motivi: 1) il selettore non è così limitato al fatto che OP utilizza un divelemento (potrebbe cambiare in futuro) e 2) in la maggior parte dei browser e versioni di jQuery, AFAIK, questo dovrebbe essere più veloce.
Herman Schaaf,

"Sento solo che il metodo size () è lì - perché non usarlo" Uhm, ok. La lengthproprietà è lì, perché non usarla? Ma se è la tua preferenza, giusto 'nuff. Dall'altro, non sapevo che l'avresti modificato. Se l'avessi fatto, l'avrei lasciato (di nuovo, ha detto specificamente "... se div con ..." (la mia enfasi) e poi menzionato inoltre che se non importava se era divo no, potresti abbandonare quella parte. Ma comunque. :-)
TJ Crowder

@TJ Crowder: Sì, penso che ci stiamo pensando troppo.
Herman Schaaf,

@TJ Crowder: Ma a mia difesa, anche se questo non è il posto per la discussione: sento che il size()metodo è lì per chiarire che stai contando il numero di elementi in un selettore jQuery e non solo un vecchio array. Ma di nuovo, questa è solo la mia preferenza.
Herman Schaaf,

2

controlla se il div esiste con una certa classe

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

}

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

2
Sembra quasi identico a questa risposta esistente .
Pang

Sì, lo fa ... ma ho provato quella risposta e non ha funzionato. Quando ho aggiunto il confronto a "indefinito", sembrava funzionare perfettamente.
stairie

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

Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Vishal Chhodwani,

2

In Jquery puoi usare così.

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

   // Do something if class exists

} else {

// Do something if class does not exist

}

Con JavaScript

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

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Ecco una soluzione di esempio per la classe di controllo (hasClass) in Javascript:

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

1

Il modo migliore in Javascript:

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

1

if ($ ("# myid1"). hasClass ("mydivclass")) {// Fai qualsiasi cosa}


Per favore, dai una spiegazione alla tua risposta
eseguibile il

0

Usa questo per cercare l'intera pagina

if($('*').hasClass('mydivclass')){
// Do Stuff
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.