3

特定のIDを持つ要素がページに存在するかどうかを確認する2つの方法を見てきましたが、なぜ2番目の方法が機能するのか疑問に思いました。

私が見た1つの方法は次のとおりであり、私はそれを理解していると思います。

if ( $('#elementID').length > 0 ) {
  //Do something
}
else {
  //Do something else
}

私がこれを行ったのを私がよく理解していない別の方法は次のとおりです。

if ( $('#elementID')[0] ) {
  //Do something
}
else {
  //Do something else
}

[0]はどういう意味ですか?私は通常[...]が配列に使用されているのを見るので、これは配列を返しますか?

ありがとうございました。

4

4 に答える 4

4

jQuery セレクターは、セレクターに一致する値の配列を返します。

最初の例は、その配列の長さをチェックします。2 番目の例では、最初の要素が存在するかどうかを確認しようとします。

if ( $('elementID').length > 0 ) {
  //checks the length of the array.  If the selector hit at least 1 element it does something

if ( $('elementID')[0] ) {
  //Tries to check if the first element exists.  
  //This really should work in this case, because jQuery will return jquery objects 
  //but in the general case for checking arrays is dangerous because will be incorrect for falsy values

結局、どちらも「要素が選択されている場合」の省略形です

私は当初、2 つ目は危険だと言いました。jQuery/DOM オブジェクトは常に true であるため、これは実際には jQuery の場合には当てはまりません。一般に、 を使用して要素が存在するかどうかを確認するのは危険ですが、if(element)これは 0 や "" などの値に対して false を返すためです。したがって、よくわからない場合は、最初の規則をお勧めします。これは、さまざまなケースでより安全だからです。ただし、この特定のケースでは、どちらのオプションも機能します。

于 2013-03-05T15:52:13.273 に答える
2

jQuery でラップされたオブジェクトには、そのすべての要素などが配列のような方法で内部に格納されているため、なぜ.length機能するのか、セレクターが結果を返したかどうかを確認できます。

$('#elementID').length

[]jQuery はこれらを配列のような方法で格納するため、一般的なブラケット表記を使用して個別にアクセスできます。これは未加工の JavaScript HTMLElement も返すことに注意してください。ラップされた jQuery を削除します。

$('#elementID')[0] // returns the 1st element

この例では、どちらも真の結果を返すため、 ifステートメントに続きます。


// On a side note: make sure to _not_ do simply:
if ( $('#elementID') ) { }

jQuery は、空の jQuery でラップされたオブジェクト (これは真実です) を返し、 ifステートメントに続きます。

于 2013-03-05T15:54:16.107 に答える
1

正しい方向に向けるには:

var test = document.getElementById('test') //returns a HTML DOM Object
var test = $('#test') //returns a jQuery Object
var test = $('#test')[0] //returns a HTML DOM Object
于 2013-03-05T15:57:32.880 に答える
1

どちらも実際には jQuery とは直接関係ありません。$(selector) は、セレクターに一致する jQuery オブジェクトの配列を返します。したがって、Array.length プロパティを使用して、一致する数を確認できます。同様に、ゼロベースのインデックスを介して配列内の任意のアイテムにアクセスできます。$(selector)[0] は配列の最初の HtmlElement オブジェクトを返しますが、$(selector)[1] は 2 番目のオブジェクトを返します。などなど。

if ($(selector)[0]) は場合によっては機能する可能性がありますが、ブール値を返さないため、条件に欠陥があるため使用しないでください。代わりに、$(selector).length > 0 を使用してください。

于 2013-03-05T16:04:53.410 に答える