私はjQueryを使っています、そして私は私のページの中の要素の存在をチェックしたいです。私は以下のコードを書きましたが、うまくいきません。
if($("#btext" + i) != null) {
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
要素の存在を確認する方法
(私は答えを投票するのに十分な評判を持っていないようですので...)
オオカミは書きました:
未定義または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または未定義にするしたがって、コードの提案は意味がありません。他の答えのいずれかを使用して、彼らはより理にかなっています。
(Update 2012)人々がコードを見て、この答えがリストのかなり上位にあるので:ここ数年、私はこの小さなプラグインを使用してきました。
jQuery.fn['any'] = function() {
return (this.length > 0);
};
$( 'div')。any()の方が$( 'div')。lengthより優れていると思います。さらに、誤字の影響はそれほどありません。 - $( 'div')。ayn()は実行時エラーになります。$( 'div')。lenghtは常に黙って偽造されるでしょう。
__
2012年11月に編集:
1)人々はコードを見てコードの周りに書かれていることを読まない傾向があるので、Wolfの引用されたコードに2つの大きな注意点を追加しました。
2)私はこの状況で使う小さなプラグインのコードを追加しました。
Lookup関数は一致する要素の配列を返します。長さがゼロかどうかを確認できます。要素を一度だけ検索し、必要に応じて結果を再利用するという変更に注意してください。
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
また、あなたは単にテキスト関数を使ってみたことがあります - 要素が存在しない場合、それは何もしません。
$("#btext" + i).text("Branch " + i);
jquery $()関数は常にnull以外の値を返します - 要素がセレクタのクレタリアにマッチしたことを意味します。要素が見つからなかった場合は、空の配列が返されます。だからあなたのコードはこのようになります -
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
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.
何を選択しても、関数$()
は常にjQueryオブジェクトを返すので、テストには使用できません。それでも唯一の方法ではないにしても、最善の方法はsize()
関数またはネイティブの長さプロパティを上で説明したように使用することです。
if ( $('selector').size() ) {...}
if ( $('#whatever')[0] ) {...}
すべてのネイティブjQueryメソッドによって返されるjQueryオブジェクトは配列ではなく、多くのプロパティを持つオブジェクトです。その1つが「長さ」プロパティです。 size()またはget(0)またはget()をチェックすることもできます - 'get(0)'は最初の要素にアクセスするのと同じように機能します。つまり、$(elem)[0]です。
「未定義」を使用してどうですか。
if (value != undefined){ // do stuff }
そのようなnullでチェックするために$("#selector").get(0)
を使います。 getはdom要素を返します。それまでは、lengthプロパティをチェックする必要がある配列を処理します。私は個人的にnull処理の長さチェックが好きではありません、それは何らかの理由で私を混乱させます:)
Lengthプロパティを使ってこれを行うことができます。
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}
オブジェクトが空の場合、このエラーを返します。
TypeErrorが見つかりません:nullのプロパティ '0'を読み込めません
私はこのコードを試しますtry{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }