JQuery проверить, имеет ли элемент класс, начинающийся с некоторой строки
Мне нужно прокрутить некоторые элементы на странице, а затем для каждого из них, если у него есть класс, начинающийся, например, с "C", что-то делать.
$('#dialog li').each(function(){
if ($(this).hasClass("^C")){
//do something
}
}
Это может показаться глупым, но какой селектор/метод следует использовать в условии if?
Ответы
Ответ 1
Обратите внимание на $('#dialog li[class^="C"]')
! Он будет соответствовать только элементам, атрибут класса которых начинается с "C", а не с классом, начинающимся с C. Например, он не будет соответствовать <li class="foo Clown">
.
AFAIK, что вы хотите, невозможно с помощью 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">
Ответ 2
Попробуйте Атрибут начинается с селектора. В качестве бонуса нет необходимости в дополнительном, если.
$('#dialog li[class^="C"]').each(function() {
// do something
});
Ответ 3
Я не думаю, что есть встроенный селектор для тестирования классов, начинающихся со строки.
Существует селектор, проверяющий, начинается ли атрибут с строки, поэтому, если вы знаете, что ваши элементы имеют только один класс (или всегда начинаются с рассматриваемого класса), вы можете сделать:
$(this).is("class^='C'")
Если, однако, вы не можете гарантировать одно из вышеуказанных условий, вам придется вручную разделить и протестировать каждый класс, определенный на элементе, как описано здесь.
Ответ 4
Попробуйте что-то вроде $('#dialog li[class^="C"]')
Ответ 5
Для более сложных фильтров, чем "начинается с", вы можете использовать функцию filter()
:
$('#dialog li').filter( function() {
// return true for every element that matches your condition
return this.className.match(/^c/) != null;
}).each(function(){
//do something
}
Ответ 6
Вы можете попробовать этот селектор. Это будет работать, если есть два или более классов, таких как "Clown foo doo" и
Вы можете попробовать что-то вроде этого $('#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");
}