Ответ 1
Как насчет:
element.is('.class1, .class2')
С
if(element.hasClass("class"))
Я могу проверить один класс, но есть ли простой способ проверить, имеет ли "элемент" какой-либо из многих классов?
Я использую:
if(element.hasClass("class") || element.hasClass("class") ... )
Это не так уж плохо, но я думаю о чем-то вроде:
if(element.hasClass("class", "class2")
К сожалению, это не работает.
Есть ли что-то подобное?
Как насчет:
element.is('.class1, .class2')
element.is('.class1, .class2')
работает, но это на 35% медленнее, чем
element.hasClass('class1') || element.hasClass('class2')
Если вы сомневаетесь в том, что я говорю, вы можете проверить на jsperf.com.
Надеюсь, это поможет кому-то.
$.fn.extend({
hasClasses: function (selectors) {
var self = this;
for (var i in selectors) {
if ($(self).hasClass(selectors[i]))
return true;
}
return false;
}
});
$('#element').hasClasses(['class1', 'class2', 'class3']);
Это должно сделать это просто и легко.
filter() - это еще один вариант
Уменьшите набор согласованных элементов до тех, которые соответствуют селектору или выполните проверку функции.
$(selector).filter('.class1, .class2'); //Filter elements: class1 OR class2
$(selector).filter('.class1.class2'); // Filter elements: class1 AND class2
Как насчет этого?
if (element.hasClass("class1 class2")
здесь ответ, который следует синтаксису
$(element).hasAnyOfClasses("class1","class2","class3")
(function($){
$.fn.hasAnyOfClasses = function(){
for(var i= 0, il=arguments.length; i<il; i++){
if($self.hasClass(arguments[i])) return true;
}
return false;
}
})(jQuery);
это не самое быстрое, но однозначное решение, которое я предпочитаю. скамейка: http://jsperf.com/hasclasstest/10
Это работало для меня
Это для Hasclass
element.hasClass('class1') || element.hasClass('class2')
Для
element.is('.class1,.class2')
Как насчет этого,
$.fn.extend({
hasClasses: function( selector ) {
var classNamesRegex = new RegExp("( " + selector.replace(/ +/g,"").replace(/,/g, " | ") + " )"),
rclass = /[\n\t\r]/g,
i = 0,
l = this.length;
for ( ; i < l; i++ ) {
if ( this[i].nodeType === 1 && classNamesRegex.test((" " + this[i].className + " ").replace(rclass, " "))) {
return true;
}
}
return false;
}
});
Прост в использовании,
if ( $("selector").hasClasses("class1, class2, class3") ) {
//Yes It does
}
И, похоже, быстрее, http://jsperf.com/hasclasstest/7
Как насчет:
if($('.class.class2.class3').length > 0){
//...
}
использовать функцию js match() по умолчанию:
if( element.attr('class') !== undefined && element.attr('class').match(/class1|class2|class3|class4|class5/) ) {
console.log("match");
}
для использования переменных в regexp, используйте это:
var reg = new RegExp(variable, 'g');
$(this).match(reg);
кстати, это самый быстрый способ: http://jsperf.com/hasclass-vs-is-stackoverflow/22
Работает для меня:
if ( $("element").hasClass( "class1") || $("element").hasClass("class2") ) {
//do something here
}
Это сработало для меня:
$('.class1[class~="class2"]').append('something');