проверка jQuery, если элемент имеет класс, начинающийся с некоторой строки

Я должен циклично выполниться через некоторые элементы на странице и затем для каждого, если бы она имела начало класса, например, "C", сделайте что-то.

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

Может звучать глупым, но какой селектор/метод я должен использовать на выражении if?

13
задан Cœur 3 September 2017 в 12:18
поделиться

5 ответов

Осторожно с $ ('# dialog li [class ^ = "C"]') ! Он будет соответствовать только элементам, атрибут класса которых начинается с "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( ... )
    

    В качестве альтернативы вам следует подумать об изменении вашего подхода и дать всем элементам дополнительный класс и фильтровать его. Это имеет то преимущество, что его также можно использовать в CSS:

    <li class="Clown Clown-Funny">
    <li class="Clown Clown-Sad">
    <li class="Clown Clown-Rodeo">
    
  • 16
    ответ дан 1 December 2019 в 21:52
    поделиться

    Я не думаю, что есть встроенный селектор для проверки классов, начинающихся со строки.

    Существует селектор для проверки того, начинается ли атрибут строкой, поэтому, если вы знаете, что ваши элементы имеют только один класс (или всегда начинаются с рассматриваемого класса), вы можете сделать:

    $ (this) .is ("class ^ = 'C'")

    Если, однако, вы не можете гарантировать ни одно из вышеперечисленных условий, вам придется вручную разделить и протестировать каждый класс, определенный в элемент, как описано здесь .

    2
    ответ дан 1 December 2019 в 21:52
    поделиться

    Попробуйте использовать атрибут , начинающийся с селектора . В качестве бонуса нет необходимости в дополнительном if.

    $('#dialog li[class^="C"]').each(function() {
        // do something
    });
    
    5
    ответ дан 1 December 2019 в 21:52
    поделиться

    Попробуйте что-нибудь вроде $ ('# dialog li [class ^ = "C"]')

    0
    ответ дан 1 December 2019 в 21:52
    поделиться

    Для более сложных фильтров, чем "начинается с", вы можете использовать функцию filter () :

    $('#dialog li').filter( function() { 
      // return true for every element that matches your condition
      return this.className.match(/^c/) != null;
    }).each(function(){
      //do something
    }
    
    0
    ответ дан 1 December 2019 в 21:52
    поделиться