jQuery corrisponde alla parte della class con hasClass

Ho diverse div con le classi “project [0-9]”:

Voglio verificare se l’elemento ha una class “progetto [0-9]”. Ho .hasClass("project") ma sono bloccato con numeri corrispondenti.

Qualche idea?

Puoi usare l’ avvio con il selettore CSS3 per ottenere quelle div:

 $('div[class^="project"]') 

Per controllare un particolare elemento, devi usare .is() , non hasClass :

 $el.is('[class^="project"]') 

Per usare esatto /project\d/ regex, puoi controllare le espressioni regolari o l’uso del selettore jQuery

 /(^|\s)project\d(\s|$)/.test($el.attr("class")) 

Un approccio migliore per il tuo html sarebbe: credo che queste div condividano alcune proprietà comuni.

 

Quindi puoi trovarli usando:

 $('.project') 
 $('div[class*="project"]') 

non fallirà con qualcosa del genere:

 
 $('div[class^="project"]') 

fallirà con qualcosa del genere:

 

Ecco un’alternativa che estende jQuery:

 // Select elements by testing each value of each element's attribute `attr` for `pattern`. jQuery.fn.hasAttrLike = function(attr, pattern) { pattern = new RegExp(pattern) return this.filter(function(idx) { var elAttr = $(this).attr(attr); if(!elAttr) return false; var values = elAttr.split(/\s/); var hasAttrLike = false; $.each(values, function(idx, value) { if(pattern.test(value)) { hasAttrLike = true; return false; } return true; }); return hasAttrLike; }); }; jQuery('div').hasAttrLike('class', 'project[0-9]') 

originale da sandinmyjoints: https://github.com/sandinmyjoints/jquery-has-attr-like/blob/master/jquery.hasAttrLike.js (ma aveva errori erratici quindi l’ho risolto)

perché non usi per controllare i numeri

 for (var i = 0; i < 10; i++) { if(....hasClass("project"+i)) { //do what you need } }