чи є кращий метод визначення того, чи елементу присвоєно клас, з точки зору продуктивності?
$('#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();
Я отримав:
Не величезна різниця, але може бути доречною, якщо ви проводите багато тестів.
EDIT, коли я кажу `` не величезна різниця, я хочу сказати, що вам потрібно зробити 10000 циклів, щоб побачити 0,8 с різниці. Я був би здивований, побачивши веб-додаток такий, що при переході з isна hasClassсистему значно покращиться ефективність роботи. Однак я погоджуюсь, що це на 35% покращення швидкості.
І те й $('#foo').hasClass('bar');інше повинно бути досить близьким з точки зору продуктивності, але здається мені більш зрозумілим і семантично правильним.