2011-12-06 20 views
6

Utilizzando vanilla javascript o prototipo qualcuno può mostrarmi come posso eseguire un controllo per verificare se esiste una classe? Per esempio io sono l'aggiunta di una classe chiamata HideIt con questo codice:Controlla se esiste una classe CSS senza jQuery

var overlay = document.getElementById("overlay_modal"); 
overlay.className += " hideIt"; 

Ho anche bisogno di uno script che in seguito può controllare per vedere se HideIt esiste. Ho provato cose come:

if (overlay.className == "hideIt") 

Ma non va bene. Qualche idea?

+0

Perché questo scendere voto? – Zac

risposta

6

Utilizzare uno regexp. \b corrisponderà ai limiti delle parole (uno spazio, un carattere di nuova riga, un carattere di punteggiatura o una fine di una stringa).

var overlay = document.getElementById("overlay_modal"); 
if (overlay.className.match(/\bhideIt\b/)) 
{ 
    // frob a widget 
} 
+0

Grazie a voi, funziona davvero alla grande! – Zac

+0

La risposta migliore, più pulita e più ampiamente supportata! :) – MRVDOG

4

si potrebbe usare getElementsByClassName(), anche se questo non è supportata in tutti i browser (non in IE < 9):

if (!document.getElementsByClassName('classname').length){ 
    // class name does not exist in the document 
} 

else { 
    // class exists in the document 
} 

Si potrebbe, a seconda delle esigenze di compatibilità del browser, utilizzare querySelectorAll():

if (document.querySelectorAll('#overlay_modal.hideIt')) { 
    // the element with id of overlay_modal exists and has the class-name 'hideIt' 
} 

Riferimenti:

+0

Continuo a pensare che [usando un'espressione regolare sul 'className' dell'elemento] (http://stackoverflow.com/a/8405435/139010) sia l'approccio migliore in questo caso, poiché hanno già un riferimento all'elemento stesso . Funziona su tutti i browser, non richiede il rilevamento di funzionalità o gli shim. –

+1

Sono tendenzialmente d'accordo, ma visto che avevi già coperto quell'angolo non mi sembrava giusto includere quell'aspetto nella mia risposta. Non stavo dicendo che entrambi sono i modi migliori, ma presentano alternative a quelli già pubblicati. –

3
var id = document.getElementById("id"); 
var classes = id.className.split(" "); 
if(classes.indexOf("class_name") == -1) 
{ 
} 
+1

Penso che tu intenda '! == -1'. –

Problemi correlati