2017-03-09 5 views
-3

特定のDOM要素が存在するかどうかを確認する必要があります。私はそれを確認するためにlengthプロパティを示唆する他の投稿を見た。それはうまく動作します。しかし、lengthの属性がなくても動作します。例:

!!$("#myElement");  // true 
!!$("#myElement").length; // true 

どちらのウェイも同じ値を返します。要素が存在するかどうかを確認するのに、lengthプロパティを使用しないのは大丈夫ですか?

+1

これは、存在しないことがわかっている要素(つまり長さが0)でテストすることを検討しましたか?結果はあなたを驚かせるかもしれません。 – BoltClock

+0

ほとんどのコードでは、if($( "#myElement")。length){}を参照します。長さがない場合はfalseと評価され、長さがある場合はtrueと評価されます。 – Neil

+0

要素が存在するかどうか気にしないので、 '$("#myElement ")'で偽陽性を得ています。 jQueryは常に要素が一致するjQueryオブジェクトを返します。したがって、実際に要素が内部にあるかどうかを常に確認するには '.length'をチェックします。 ►[** https://learn.jquery.com/using-jquery-core/jquery-object/**](https://learn.jquery.com/using-jquery-core)をご覧ください。/jquery-object /) – Nope

答えて

0

いいえ、は常にです。lengthです。

jQueryオブジェクトが空でもnullでもないため、ここでロジックに問題があります。要素が選択されていなくても常にオブジェクトを返します。したがって、ブール値に確実に変換してセレクタが要素と一致しているかどうかを確認できません。

console.log(!!$('#exists')); // should be true 
 
console.log(!!$('#doesNotExist')); // should be false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="exists"></div>

あなたが上見ることができるように、両方のテストはtrueを返します。

+0

あなたは正しいです!!! []は真を返します。 '!! $("#myElement ")[0]'を使用できますか? – user31782

+0

できますが、できません。 'length'プロパティは受け入れられた標準です。 –

+0

私はなぜ '!! []'が真実を返すのか不思議でしたか?空の配列が偽であるとは思われないのですか? – user31782

関連する問題