35

removeClassjquery オブジェクトで APIを使用する前に、クラスが存在するかどうかを確認する必要がありますか? 例えば。

if($(this).hasClass("test"))
   $(this).removeClass("test");

また

$(this).removeClass("test");

必要でない場合、その理由は何ですか?

4

3 に答える 3

39

これだけを使用してください:

$(this).removeClass("test");

クラスの存在を確認する必要はありません。

jQueryソースから、メソッドがメソッドをremoveClass使用replaceしてサブストリングを削除していることがわかります。

className = (" " + elem.className + " ").replace(rclass, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
    className = className.replace(" " + classNames[c] + " ", " ");
}​

またreplace、一致する部分文字列が存在しない場合は何も削除されません。

于 2012-06-05T10:30:09.933 に答える
6

少なくとも Chrome では、removeClass() の前に hasClass() チェックを追加すると便利です。文字列が変更されていなくても、jQuery は無条件に新しい文字列に elem.className を割り当てるため、Chrome はレイアウトを無効にして再計算します。

これは Chrome のバグであり、className が以前の値から実際に変更されているかどうかを確認する必要があると主張する人もいます。ただし、html 仕様の奥深くに書かれているあいまいな要件のために、ブラウザがレイアウトを再計算する必要がある場合もあります。

Firefox はテストしていません。Safari Web インスペクターは、レイアウトが無効化/再計算された理由 (どの JavaScript 関数が原因か) がわからないため、役に立ちません。

于 2013-06-21T06:36:36.627 に答える
3

いいえ、チェックする必要はありませんremoveClass()

使うだけ

   $(this).removeClass("test");
于 2012-06-05T10:30:18.467 に答える