web-dev-qa-db-ja.com

「addClass」の前に「hasClass」を使用する必要がありますか?

要素にクラスaがあるかどうかを確認し、ない場合は追加する次のスクリプトに遭遇しました:

if (!$("div").hasClass("a")){
   $("div").addClass("a");
}

JQueryは既に存在するクラスを追加しないため、これを次のように変更できます。

$("div").addClass("a");

ただし、最初にhasClassを使用することでパフォーマンスが向上しますか、それともaddClassと同じ方法を使用して、ロジックを複製しますか?

98
Curt

.hasClass()チェックはjQuery 常にチェックする.addClass()内からので、有用ではありません。余分な作業です。

158
Jon

ソースコードで確認できます。 https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L38-L45 クラスが存在するかどうかを確認addClassを使用する場合。

したがって、この場合は.hasClass()を使用する理由はありません。(例外は、要素にクラスがない場合にさらにアクションを実行したい場合です。 。

11

それが価値があるものとして、私の限られたテストで.hasClass()のパフォーマンスの改善があります: http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

ただし、スタンドアロンの.removeClass()がChromeで数倍遅いと報告した場合でも、1秒間に約70,000回の操作が発生します。

6
chrisM