jQueryでnullオブジェクトをチェックする方法


169

私はjQueryを使用していて、ページ内の要素の存在を確認したいと思います。私は次のコードを書きましたが、機能していません:

if($("#btext" + i) != null) {
    //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

要素の存在を確認するにはどうすればよいですか?

回答:


251

jQuery FAQを確認してください ...

セレクターによって返されるjQueryコレクションのlengthプロパティを使用できます。

if ( $('#myDiv').length ){}

var _myDiv = $( '#myDiv');についてどう思いますか ... .... if(_myDiv.lenght){...}は例外を生成します。
Nuri YILMAZ、2011年

1
eleotlecramが言ったように; .lengthを避けた方が良い
numediaweb

5
@AurelianoBuendia、あなたはlenght代わりに使用しましたlength; スペルミスです。
サム・

4
@ numediaweb、eleotlecramは回避するように言っていません.length
サム・

1
しかし、「プロパティのnullの長さを読み取れません」というエラーは表示されませんか?
Sagive SEO 2018

61

(私は答えに投票するのに十分な評判がないようです...)

ウルフは書きました:

未定義またはnullオブジェクトのlengthプロパティを呼び出すと、IEおよびWebkitブラウザーが失敗します。

代わりにこれを試してください:

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") !== null){
  // do something
}

または

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") === null){
  // don't do something
}

未定義またはnullオブジェクトでlengthプロパティを呼び出すとブラウザーが失敗することは事実ですが、jQueryのセレクターの結果($( '...'))がnullまたは未定義になることはありません。したがって、コードの提案は意味がありません。他の答えの1つを使用してください。


(2012年の更新)人々がコードを見て、この答えはリストのかなり上位にあるので:ここ数年、私はこの小さなプラグインを使用してきました:

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };

私は思う。任意の()$(「div要素を」)よりも良好読み込む。$(「DIV」)の長さを、プラスあなたはタイプミスから限り苦しむません:。$(「DIV」)アイン()の実行時エラーになります、$( 'div')。 lenghtは、ほとんどの場合、常に偽りである可能性があります。

__
2012年11月の編集:

1)人々はコードを見て、コードの周りに書かれていることを読まない傾向があるので、ウルフの引用コードに2つの大きな注意書きのメモを追加しました。
2)この状況で使用する小さなプラグインのコードを追加しました。


2
@VovaPopov:次回は、もう少し時間をかけて回答を読むことをお勧めします。「by Wolf」のコード例が間違っていると私は単に述べていました。私は答えを提供したことがなく、より意味のある他のいくつかの答えを参照しただけです。
eleotlecram

いい答えだ。人々がそれを誤解して申し訳ありません。
ジョーシモンズ

14

ルックアップ関数は、一致する要素の配列を返します。長さがゼロかどうかを確認できます。要素を一度だけルックアップし、必要に応じて結果を再利用するための変更に注意してください。

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}

また、テキスト関数を使用してみましたか?要素が存在しない場合、何も実行されません。

$("#btext" + i).text("Branch " + i);

7
0はfalse値なので、elem.length式はfalseと評価されます。つまり、「!= 0」の部分は必要ありません
James

2
@ 999、ゼロに対するチェックによってコードが読みやすくなると思いますが、スクリプト言語に慣れている人にとってはどちらの方法でも読みやすいと思います。
サム・

12

jquery $()関数は常にnull以外の値を返します-要素がセレクタクレタリアと一致したことを意味します。要素が見つからなかった場合は、空の配列を返します。したがって、コードは次のようになります-

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

1
$()が配列を返すのは本当ではないと思います。jQueryオブジェクトには配列に似た動作がありますが、実際には配列ではないと思います。すべての動作が配列の動作と同じではないことに気付くと思います。この簡単なデモをご覧ください。
サム・

5

jQuery 1.4では$ .isEmptyObject関数を取得しますが、私たちのような古いバージョンのjQを使用せざるを得ない場合は、貧弱なDrupal開発者がこのコードを盗むだけです。

// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
  for ( var name in obj ) {
    return false;
  }
  return true;
}

次のように使用します。

console.log(isObjectEmpty(the_object)); // Returns true or false.

これは問題に対処していません。
サム・

5

何を選択しても、関数は$()常にjQueryオブジェクトを返すため、テストに使用できません。まだ最善の方法(唯一ではないにしても)は、size()上で説明したように関数またはネイティブの長さプロパティを使用することです。

if ( $('selector').size() ) {...}                   

3
if ( $('#whatever')[0] ) {...}

すべてのネイティブjQueryメソッドによって返されるjQueryオブジェクトは配列ではなく、多くのプロパティを持つオブジェクトです。それらの1つは「長さ」プロパティです。size()またはget(0)またはget()を確認することもできます-'get(0)'は最初の要素、つまり$(elem)[0]にアクセスするのと同じように機能します



1

$("#selector").get(0)そのようにnullでチェックするために使用します。getはdom要素を返します。それまでは、長さプロパティを確認する必要がある配列を再処理します。私は個人的にnull処理の長さチェックが好きではありません、それはなぜか私を混乱させます:)


人によって考え方が異なるのは興味深いことです。最初の要素が存在するかどうかをチェックするよりも、要素の数がゼロかどうかをチェックする方が理にかなっていると思います。
サム・

1

これを行うには、lengthプロパティを使用します。

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}

2
(this).length> 0ですか?
sage88

0

オブジェクトが空の場合、このエラーを返します:

Uncaught TypeError: Cannot read property '0' of null

私はこのコードを試します:

try{
  if ($("#btext" + i).length) {};               
}catch(err){
  if ($("#btext" + i).length) {
     //working this code if the item, not NULL 
   }
}

-4
if (typeof($("#btext" + i)) == 'object'){
    $("#btext" + i).text("Branch " + i);
}

-7

未定義またはnullオブジェクトのlengthプロパティを呼び出すと、IEおよびWebkitブラウザーが失敗します。

代わりにこれを試してください:

if($("#something") !== null){
  // do something
}

または

if($("#something") === null){
  // don't do something
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.