jQuery hasClass () – проверьте несколько classов
С:
if(element.hasClass("class"))
Я могу проверить один class, но есть ли простой способ проверить, имеет ли «элемент» какой-либо из многих classов?
Я использую:
- Массовые вставки занимают больше времени, чем ожидалось, используя Dapper
- C # / F # Сравнение производительности
- Является ли datareader быстрее, чем dataset при заполнении данных?
- Медленная инструкция jmp
- arrayfun может быть значительно медленнее, чем явный цикл в matlab. Зачем?
if(element.hasClass("class") || element.hasClass("class") ... )
Это не так уж плохо, но я думаю о чем-то вроде:
if(element.hasClass("class", "class2")
К сожалению, это не работает.
Есть что-то в этом роде?
- StringBuilder / StringBuffer против оператора «+»
- Ускорьте работу цикла в R
- '...! = Null' или 'null! = ...' лучшая производительность?
- В каких сценариях замораживание объектов WPF значительно повышает производительность?
- Производительность бритвы ASP.NET MVC 3
- Секундомер против использования System.DateTime.Now для событий синхронизации
- Передача целых чисел в виде постоянных ссылок и копирование
- MySQL: многие таблицы или многие базы данных?
Как насчет:
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