jQuery检查元素是否有一个以某个字符串开头的类

时间:2010-04-19 14:36:33

标签: jquery-selectors

我需要遍历页面中的一些元素然后,对于每一个元素,如果它有一个以“C”开头的类,那就做一些事情。

$('#dialog li').each(function(){
    if ($(this).hasClass("^C")){
         //do something
    }
}

这可能听起来很愚蠢,但我应该在if子句上使用什么样的选择器/方法?

6 个答案:

答案 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
}