jQueryが要素を見つけられなかったかどうかの判断


126

私はjQueryのセレクター、特にidセレクターを使用しています。

$("#elementId")...

jQueryが要素を検出したかどうかをどのように判断すればよいですか?指定されたIDの要素が存在しない場合でも、次のステートメントは私に与えます:[object Object]

alert($("#idThatDoesnotexist"));

回答:


187

$('#idThatDoesnotexist').lengthあなたが探しているものです。(何も見つからない場合、これはになり=== 0ます。)したがって、条件付きステートメントはおそらく次のようになります。

if($( '#id')。length){/ *コードが見つかった場合* /} else {/ *コードが見つからなかった場合* /}

jQuery(ほとんど)は、使用時に常に「jQueryオブジェクト」を返すため、そのアラートからオブジェクトが返されます。これは、jQueryが見つけた要素のラッパーであり、メソッドチェーンを許可します。


3
ゼロは必要ありません。$( '#id')。lengthで十分です(JavaScriptではゼロ== false)
David Hellsing

13
@Davidあなたがそれを必要としないという事実は必ずしもそれを冗長にするわけではありません、一見するとIMOはそれをより明確にします。
Abir

1
@Abir:明示的に0ではなく、真実かどうかをテストして、それなしで構文に慣れるまで、それがより明確になるだけです== 0
スコットスタッフォード

@ScottStafford、より多くのクリアランスのためにif (!!$('#id').length)、ブールキャストを行うを使用することもできます。
Daniele Vrut 14

6
また、JavaScriptのニュアンスに不慣れな人がコードを読んだときに、いくつかの文字を保存することの利点が潜在的な混乱を相殺するかどうかも考慮する必要があります。私の意見では保守性に関する限り、ベストプラクティスではありません。
Matt Carr

26

Futuraprimeは正しいですが、次のようにすることで構文を短縮できます。

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}

11
!$.isEmptyObject($.find('#id'))

要素が存在する場合はtrueを返し、存在しない場合はfalseを返します。


7
$('#my_selector').length > 0 
$('#my_selector').get(0) !== undefined
$('#my_selector')[0] !== undefined

これが基本です。今は好きなことをしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.