1

次のHTMLとJavascriptがあったとしましょう。ここでは、ページには1つのdivしかありませんが、いつでも合計2つのdivが存在する可能性があります(動的に挿入されます)。

jQueryでは、要素に対して何かを行う前に、要素が存在するかどうかを最初にテストする必要がありますか。特に、要素が存在しない可能性があることがわかっている場合はそうですか。

でテストする必要がありif (('#div2).length > 0)ますか?

それとも、jQueryにそれを理解させる必要がありますか?存在しない場合、jQueryは要素が存在しないことを認識できるほど賢いので、何も実行せず、エラーもスローしません。しかし、それが存在するかどうかを最初にテストする方が良いでしょうか?ベストプラクティスかもしれませんか、それともパフォーマンスの違いがありますか?

HTML:

<div id="div1"></div>

Javascript:

$('#div1').text('Hello World!');

/*
  Should I first test and see if this div exists?
  With if (('#div2').length > 0)
  Or leave it as is and let jQuery handle it
*/
$('#div2').text('Should I have first tested to see if this div existed?');
4

2 に答える 2

0

そこにない要素で実行されるコードはおそらくないはずだと思います。そうは言っても、一致する要素がないセレクターで操作を実行することから生じる実際の問題は想像できません。したがって、それをテストする必要はないはずです。

jQueryは、一致したすべての要素をループして操作を実行するため、一致する要素がない場合は、何もループしません。パフォーマンスがわずかに向上する可能性があることを除けば、何が得られるかわかりません。

「時期尚早の最適化はすべての悪の根源です。」-ドナルド・クヌース

于 2013-02-17T06:26:21.740 に答える
0

jQueryのファクトリ関数によって返されるオブジェクトは配列のようなものです。選択したDOM要素は数値インデックス({0: elem1, 1:elem2, etc})に設定されます。lengthプロパティは、一致した要素の数に設定されます。

jQueryのメソッドはすべて、アクションを実行するために要素のコレクションを反復処理するように設計されています。これは基本的に、obj.test('foo')次と同等であることを意味します。

for (i = 0; i < obj.length; i++) {
    obj[i].textContent = 'foo';
}

コレクションに要素がない場合、イテレータは反復しないため、メソッドはアクションを実行しません。

したがって、tl; dr、選択範囲でアクションを実行する前に、選択範囲に要素が含まれているかどうかを確認する理由はめったにありません。

于 2013-02-17T06:28:59.787 に答える