В jQuery рекомендуется ли перед добавлением этого класса проверять, назначен ли класс элементу? Будет ли это вообще иметь какой-либо эффект?
Например:
<label class='foo'>bar</label>
Если вы сомневаетесь, что класс baz
уже назначен label
, это будет лучший подход:
var class = 'baz';
if (!$('label').hasClass(class)) {
$('label').addClass(class);
}
или этого будет достаточно:
$('label').addClass('baz');
.hasClass
только тогда, когда мне нужно проверить, существует ли класс, если мне просто нужно назначить класс - я использую.addClass
. jQuery не дублирует классыОтветы:
Просто позвони
addClass()
. jQuery выполнит проверку за вас. Если вы проверяете самостоятельно, вы удваиваете объем работы, поскольку jQuery все равно выполнит проверку за вас.источник
Простая проверка в консоли убедила бы вас, что
addClass
многократный вызов одного и того же класса безопасен.В частности, вы можете найти чек в источнике
источник
Этот вопрос привлек мое внимание вслед за другим, который был помечен как дубликат этого .
Этот ответ обобщает принятый ответ с небольшими добавленными деталями.
Вы пытаетесь оптимизировать, избегая ненужных проверок, в связи с этим следует учитывать следующие факторы:
class="collapse"
в вашем HTML, вызовElement.classList.add("collapse");
не добавит дополнительный класс коллапса . Я не знаю базовой реализации, но полагаю, она должна быть достаточно хорошей.addClass
иremoveClass
реализациях (я проверил исходный код ). ВедьaddClass
после некоторых проверок и если класс существует, JQuery не пытается добавить его снова. Точно так жеremoveClass
JQuery выполняет некоторые действия, в соответствии сcur.replace( " " + clazz + " ", " " );
которыми удаляет класс, только если он существует.Стоит отметить, что JQuery выполняет некоторую оптимизацию в своей
removeClass
реализации, чтобы избежать бессмысленного повторного рендеринга. Это выглядит такТаким образом, лучшая микро- оптимизация, которую вы могли бы сделать, была бы с целью избежать накладных расходов на вызов функций и связанных проверок реализации.
Скажем, вы хотите переключить класс с именем
collapse
, если вы полностью контролируете, когда класс добавляется или удаляется, и еслиcollapse
класс изначально отсутствует, вы можете оптимизировать следующим образом:Как и в стороне, если вы переключая класс из - за изменения в позиции прокрутки, вам настоятельно рекомендуется душить обработки событий прокрутки.
источник
источник