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

http://jsperf.com/hasclass-vs-is-so
Это isмногоцелевой, вы можете, например, делать is('.class')и is(':checked')т. Д., Что означает, что у isнего больше возможностей, где hasClassон ограничен, который только проверяет, установлен ли класс или нет.
Следовательно, 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();
Я получил:
Не большая разница, но может иметь значение, если вы много делаете тестов.
ИЗМЕНИТЬ, когда я говорю «не большая разница, я хочу сказать, что вам нужно сделать 10000 циклов, чтобы увидеть разницу в 0,8 секунды. Я был бы удивлен, если бы увидел веб-приложение, в котором переключение с isна hasClassпривело бы к значительному улучшению общей производительности. Однако я допускаю, что это увеличение скорости на 35%.
Оба должны быть довольно близки по производительности, но $('#foo').hasClass('bar');мне кажутся более читаемыми и семантически правильными.