jQuery hasClass () – проверьте несколько classов

С:

if(element.hasClass("class")) 

Я могу проверить один class, но есть ли простой способ проверить, имеет ли «элемент» какой-либо из многих 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') 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 

вот ответ, который следует за синтаксисом $ (element) .hasAnyOfClasses (“class1”, “class2”, “class3”):

 (function($){ $.fn.hasAnyOfClasses = function(){ for(var i= 0, il=arguments.length; i 

это не самый быстрый, но его однозначный и решение, которое я предпочитаю. скамейка: http://jsperf.com/hasclasstest/10

Это работало для меня

Это для Hasclass

 element.hasClass('class1') || element.hasClass('class2') 

Это для

  element.is('.class1,.class2') 

Как насчет этого?

if (element.hasClass("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){ //... } 

Это сработало для меня:

 $('.class1[class~="class2"]').append('something'); 

используйте функцию 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

  • Почему я должен использовать CDN от Google для jQuery?
  • Почему Skylake намного лучше, чем Broadwell-E для однопоточной памяти?
  • Производительность mgo-запросов кажется медленно медленной (500-650 мс)
  • Механизм отправки сообщения Objective C
  • 5 лет спустя, есть ли что-то лучшее, чем «самые быстрые возможные delegates на С ++»?
  • Производительность селектора jQuery с контекстом
  • Есть ли причина в производительности для объявления параметров метода final в Java?
  • Быстрое расстояние Левенштейна в R?
  • Android: RunOnUiThread против AsyncTask
  • clflush для аннулирования строки кэша через функцию C
  • MySQL: самый быстрый способ подсчета количества строк
  • Давайте будем гением компьютера.