我需要遍历页面中的一些元素然后,对于每一个元素,如果它有一个以“C”开头的类,那就做一些事情。
$('#dialog li').each(function(){
if ($(this).hasClass("^C")){
//do something
}
}
这可能听起来很愚蠢,但我应该在if子句上使用什么样的选择器/方法?
答案 0 :(得分:16)
小心$('#dialog li[class^="C"]')
!它只匹配元素,其class属性以“C”开头,而不是以C开头的类。例如,它不匹配<li class="foo Clown">
。
AFAIK你想要的不仅仅是mit jQuery。您需要循环遍历类并分别检查每个类。类似的东西:
$('#dialog li').filter(function(){
var classes = this.className.split(/\s/);
for (var i = 0, len = classes.length; i < len; i++)
if (/^C/.test(classes[i])) return true;
return false;
}).each( ... )
另外,您应该考虑更改您的方法,并为所有元素添加一个额外的类并按此过滤。这有一个附加功能,它也可以在CSS中使用:
<li class="Clown Clown-Funny">
<li class="Clown Clown-Sad">
<li class="Clown Clown-Rodeo">
答案 1 :(得分:5)
试试Attribute Starts With Selector。作为奖励,没有必要额外的if。
$('#dialog li[class^="C"]').each(function() {
// do something
});
答案 2 :(得分:1)
我认为没有内置的选择器来测试以字符串开头的类。
有一个选择器可以测试属性是否以字符串开头,所以如果你知道你的元素只有一个类(或者总是以相关的类开头),你可以这样做:
$(this).is("class^='C'")
但是,如果您无法保证上述任何一种情况,则必须手动拆分并测试元素上定义的每个类,如here所述。
答案 3 :(得分:1)
您可以尝试该选择器。如果有两个或更多这样的课程,这将是有效的&#34; Clown foo doo&#34;和
你可以尝试这样的事情$('#dialog li[class*="C"]')
,在这种情况下会选择包含&#34; C&#34;信,例如&#34; exCelence foo&#34;。
如果您有兴趣计算有多少课程以&#34; C&#34;无论他们的位置如何(无论他们是在开头,在中间还是在中间),你都可以尝试这样的事情:
$('#dialog li[class^="C"]').each(function() {
var classes = div.attr("class").split(" ");
var count = 0;
$.each(classes, function(i, v){ if(v.indexOf('C')!=-1) count++; });
if (count == 1) alert("It has one 'C' class");
if (count>1) alert("It more than one 'C' class");
}
答案 4 :(得分:0)
尝试$('#dialog li[class^="C"]')
答案 5 :(得分:0)
对于比“以...开头”更详细的过滤器,您可以使用filter()
功能:
$('#dialog li').filter( function() {
// return true for every element that matches your condition
return this.className.match(/^c/) != null;
}).each(function(){
//do something
}