jqueryオブジェクトにremoveClass
apiを使用する前に、クラスが存在するかどうかを確認する必要がありますか?例えば、 。hasClass before removeClass - jQuery
if($(this).hasClass("test"))
$(this).removeClass("test");
または
$(this).removeClass("test");
必要でない場合は、なぜ?
jqueryオブジェクトにremoveClass
apiを使用する前に、クラスが存在するかどうかを確認する必要がありますか?例えば、 。hasClass before removeClass - jQuery
if($(this).hasClass("test"))
$(this).removeClass("test");
または
$(this).removeClass("test");
必要でない場合は、なぜ?
使用ちょうどこの:
$(this).removeClass("test");
クラスの存在をチェックする必要はありません。一致するサブストリングが存在しない場合
className = (" " + elem.className + " ").replace(rclass, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}
そしてreplace
は何も削除されません。
jQuery sourcesから、我々はremoveClass
方法は、部分文字列を削除するためにreplace
メソッドを使用していることがわかります。
。ありがとう – user917670
+1素晴らしい説明のために – thecodeparadox
正しい機能のために 'hasClass'は必要ないかもしれませんが、いくつかのクイックテストは、最初にチェックする方が速いことを示しています(少なくとも3つの異なるブラウザで私にとっては) - https://jsfiddle.net/trevorpower/5mu7shg1/2/ – tpower
いいえ、removeClass()
を確認する必要はありません。
ただ、少なくともChromeの
$(this).removeClass("test");
を使用し、jQueryのは、無条件に新しい文字列にelem.classNameを割り当てるので、removeClass()の前にご確認ください)hasClassを(追加することに有用であっても「という文字列hasn場合変更されたため、Chromeはレイアウトを無効にして再計算します。
これはChromeのバグであり、classNameが実際に以前の値から変更されたかどうかを確認する必要があります。しかし、ブラウザには、html仕様のどこかに深く書かれているいくつかのわかりにくい要件のために、レイアウトを再計算するためにがあるかもしれません。
私はFirefoxをテストしていません。 SafariのWebインスペクタは、レイアウトが無効/再計算された理由(javascript関数がそれを引き起こした理由)を教えてくれないので役に立たない。
これはChromeでも有効ですか? – Lipis
いずれにしても試しましたか?それをやった? – lanzz
よくjqueryはほとんどの場合スローエラーを回避し、うまく動作します – user917670
それは動作し、エラーを生成しないので、明らかに必要ありません。サードパーティのコードで例外処理を二次的に推測しようとするべきではありません。例外がエスケープされない場合、処理されます。物事を説明する – lanzz