JQuery соответствует части класса с hasClass
У меня есть несколько div с "project [0-9]" classes:
<div class="project1"></div>
<div class="project2"></div>
<div class="project3"></div>
<div class="project4"></div>
Я хочу проверить, имеет ли элемент класс "[0-9]". У меня .hasClass("project")
, но я застрял с соответствующими номерами.
Любая идея?
Ответы
Ответ 1
Вы можете использовать startswith селектор CSS3, чтобы получить эти divs:
$('div[class^="project"]')
Чтобы проверить один конкретный элемент, вы должны использовать .is()
, а не hasClass
:
$el.is('[class^="project"]')
Для использования точного выражения /project\d/
вы можете проверить регулярные выражения селектора jQuery или использовать
/(^|\s)project\d(\s|$)/.test($el.attr("class"))
Ответ 2
Лучшим подходом для вашего html будет:
Я считаю, что эти div имеют некоторые общие свойства.
<div class="project type1"></div>
<div class="project type2"></div>
<div class="project type3"></div>
<div class="project type4"></div>
Затем вы можете найти их, используя:
$('.project')
Ответ 3
$('div[class*="project"]')
не сработает с чем-то вроде этого:
<div class="some-other-class project1"></div>
Ответ 4
$('div[class^="project"]')
не удастся с чем-то вроде этого:
<div class="some-other-class project1"></div>
Вот альтернатива, которая расширяет jQuery:
// Select elements by testing each value of each element attribute `attr` for `pattern`.
jQuery.fn.hasAttrLike = function(attr, pattern) {
pattern = new RegExp(pattern)
return this.filter(function(idx) {
var elAttr = $(this).attr(attr);
if(!elAttr) return false;
var values = elAttr.split(/\s/);
var hasAttrLike = false;
$.each(values, function(idx, value) {
if(pattern.test(value)) {
hasAttrLike = true;
return false;
}
return true;
});
return hasAttrLike;
});
};
jQuery('div').hasAttrLike('class', 'project[0-9]')
оригинал от sandinmyjoints: https://github.com/sandinmyjoints/jquery-has-attr-like/blob/master/jquery.hasAttrLike.js
(но у меня были ошибки, поэтому я исправил их)
Ответ 5
почему вы не используете для проверки номеров
for (var i = 0; i < 10; i++) {
if(....hasClass("project"+i))
{
//do what you need
}
}