J'ai plusieurs div avec les classes "projet [0-9]":
<div class="project1"></div>
<div class="project2"></div>
<div class="project3"></div>
<div class="project4"></div>
Je veux vérifier si l'élément a une classe "projet [0-9]". J'ai .hasClass("project")
mais je suis coincé avec les numéros correspondants.
Une idée?
Vous pouvez utiliser le sélecteur startswith CSS3 pour obtenir ces divs:
$('div[class^="project"]')
Pour vérifier un élément particulier, vous utiliseriez .is()
, not hasClass
:
$el.is('[class^="project"]')
Pour utiliser la regex exacte /project\d/
, vous pouvez consulter les expressions régulières du sélecteur jQuery ou utiliser
/(^|\s)project\d(\s|$)/.test($el.attr("class"))
Une meilleure approche pour votre html serait: Je crois que ces div partagent certaines propriétés communes.
<div class="project type1"></div>
<div class="project type2"></div>
<div class="project type3"></div>
<div class="project type4"></div>
Ensuite, vous pouvez les trouver en utilisant:
$('.project')
$('div[class*="project"]')
ne manquera pas avec quelque chose comme ça:
<div class="some-other-class project1"></div>
$('div[class^="project"]')
va échouer avec quelque chose comme ça:
<div class="some-other-class project1"></div>
Voici une alternative qui étend 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]')
original provenant de sandinmyjoints: https://github.com/sandinmyjoints/jquery-has-attr-like/blob/master/jquery.hasAttrLike.js