Jquery selectors jQuery检查元素是否有以字符串开头的类

Jquery selectors jQuery检查元素是否有以字符串开头的类,jquery-selectors,Jquery Selectors,我需要遍历页面中的一些元素,然后,对于每一个元素,如果它有一个以“C”开头的类,则执行一些操作 $('#dialog li').each(function(){ if ($(this).hasClass("^C")){ //do something } } 这听起来可能很傻,但是我应该在if子句上使用什么选择器/方法呢?试试这个。作为奖励,没有必要额外支付if $('#dialog li[class^="C"]').each(function() {

我需要遍历页面中的一些元素,然后,对于每一个元素,如果它有一个以“C”开头的类,则执行一些操作

$('#dialog li').each(function(){
    if ($(this).hasClass("^C")){
         //do something
    }
}
这听起来可能很傻,但是我应该在if子句上使用什么选择器/方法呢?

试试这个。作为奖励,没有必要额外支付if

$('#dialog li[class^="C"]').each(function() {
    // do something
});

尝试类似于
$('#dialog li[class^=“C”]')

的方法,以获得比“开始”更复杂的过滤器。您可以使用
过滤器()
函数:

$('#dialog li').filter( function() { 
  // return true for every element that matches your condition
  return this.className.match(/^c/) != null;
}).each(function(){
  //do something
}

我认为没有内置选择器来测试以字符串开头的类

有一个选择器可以测试属性是否以字符串开头,因此如果您知道元素只有一个类(或者总是以有问题的类开头),可以执行以下操作:

$(this).is(“class^='C'”)

但是,如果不能保证上述任一条件,则必须手动拆分并测试元素上定义的每个类,如前所述。

小心使用
$('#dialog li[class^=“C”]')
!它将只匹配class属性以“C”开头的元素,而不是以C开头的类。例如,它将不匹配
  • 您想要的东西不可能仅限于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( ... )
    
    $('#dialog li').filter(函数(){
    var classes=this.className.split(/\s/);
    for(var i=0,len=classes.length;i

    Alternativly,你应该考虑改变你的方法,并给所有的元素加上一个类,并通过它过滤。它还有一个优点,即它也可以用于CSS:

    <li class="Clown Clown-Funny">
    <li class="Clown Clown-Sad">
    <li class="Clown Clown-Rodeo">
    

  • 您可以尝试使用该选择器。如果有两个或两个以上的类,比如“小丑福斗”和

    但是,您可以尝试这样的方法,
    $(“#dialog li[class*=“C”]”)
    在这种情况下,将选择任何包含“C”字母的内容,例如“exCelence foo”

    如果您有兴趣计算有多少类以“C”开头,而不管它们的位置如何(不管它们是在开头、结尾还是中间),那么您可以尝试以下方法:

    $('#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");
    }
    

    内部引号是不必要的:
    $(“#dialog li[class^=C]”)
    也可以使用。@Tomalak-jQuery文档中有它们,但这很好@justkt:除非您在查找的字符串中有空格(或者jQuery选择器中有语法值的任何其他内容,如方括号),否则内部引号是多余的。谢谢。刚刚看到一个错误,我会改正的。我应该使用过滤器,而不是每个过滤器。它在jQuery中可能是这样的:$($(div[class^='小丑-'),div[class*='小丑-'))脱帽致敬。。奇妙的解决方案。
    if(count)警报(“它有一个‘C’类”)count>1
    也会发生code>。虽然这对大多数人来说没问题,但它不会帮助任何想要检查现有元素集是否有以char开头的类的人。