jQuery匹配hasClass类的一部分

我有几个div与“project [0-9]”类:

我想检查元素是否有“project [0-9]”类。 我有.hasClass("project")但我坚持使用匹配的数字。

任何的想法?

您可以使用startswith CSS3选择器来获取这些div:

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

要检查一个特定元素,您可以使用hasClass .is() ,而不是hasClass

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

要使用exact /project\d/ regex,您可以查看jQuery选择器正则表达式或使用

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

对你的html更好的方法是:我相信这些div有一些共同属性。

 

然后你可以使用:

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

不会因为这样的事情而失败:

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

会失败的是这样的:

 

这是一个扩展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]') 

来自sandinmyjoints的原文: https : //github.com/sandinmyjoints/jquery-has-attr-like/blob/master/jquery.hasAttrLike.js (但它有错误所以我修复了它)

你为什么不用它来检查数字

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