首页 > 解决方案 > 我应该在 removeClass() 之前检查一个元素是否 hasClass() 吗?

问题描述

如果我确实想从元素中删除某个类,我应该盲目调用removeClass()还是应该先检查hasClass()

在这两种方法中是否有任何可提及的性能优势?对此有最佳做法吗?

例子:

function showMessage(){
    $('.message').removeClass('hidden');
}

对比

function showMessage(){
    if($('.message').hasClass('hidden')){
        $('.message').removeClass('hidden');
    }
}

标签: javascriptjquery

解决方案


如果元素上不存在类,则调用removeClass()不会引发任何错误,因此实际上不需要先调用hasClass()。它只会导致额外的开销。

但是,当询问性能时,调用getClass()removeClass()可能会很快。正是.message在 DOM 中重复查找元素会减慢速度。因此,如果您想先调用hasClass(),最好不要重复元素查找:

function showMessage() {
    const message = $('.message');

    if(message.hasClass('hidden')){
        message.removeClass('hidden');
    }
}

推荐阅读