существует ли предпочтительный способ определения того, назначен ли элемент классу с точки зрения производительности?
$('#foo').hasClass('bar');
или
$('#foo').is('.bar');
существует ли предпочтительный способ определения того, назначен ли элемент классу с точки зрения производительности?
$('#foo').hasClass('bar');
или
$('#foo').is('.bar');
Я сделал тест, следующий за комментарием, и четыре upvotes для очень комментариев. Оказывается, то, что я сказал, является правильным ответом. Вот результат:

http://jsperf.com/hasclass-vs-is-so
is является многоцелевым, вы можете, например, сделать is('.class'), is(':checked') и т.д., что означает is имеет больше возможностей, чем hasClass ограничен, который проверяет только класс, который установлен или нет.
Следовательно, hasClass должен быть быстрее, если производительность на любом уровне является вашим приоритетом.
Так как is более общий, чем hasClass, и использует filter для обработки предоставленного выражения, кажется вероятным, что hasClass быстрее.
Я запустил следующий код с консоли Firebug:
function usingIs() {
for (var i=0; i<10000;i++) {
$('div#example-0').is('.test');
}
}
function usingHas(){
for (var i=0; i<10000;i++) {
$('div#example-0').hasClass('test');
}
}
usingIs();
usingHas();
Я получил:
Не большая разница, но может быть актуальной, если вы много тестируете.
EDIT, когда я говорю "не огромная разница, я хочу сказать, что вам нужно сделать 10000 циклов, чтобы увидеть 0.8s разницы. Я был бы удивлен, увидев веб-приложение, так что переход от is до hasClass значительно улучшился бы во всей производительности. Тем не менее, я утверждаю, что это 35% -ное улучшение скорости.
Оба должны быть довольно близки по производительности, но $('#foo').hasClass('bar'); кажется более читабельным и семантически правильным для меня.
.hasClass намного быстрее, чем .is
Вы можете проверить это из здесь. Измените тестовый пример в соответствии с вами.