JQueryセレクターが空のオブジェクトを返すかどうかを検出するための最良の方法は何ですか。もしあなたがそうするなら:
alert($('#notAnElement'));
あなたは[object Object]を取得するので、私は今それを行う方法は次のとおりです。
alert($('#notAnElement').get(0));
これは "undefined"と書くので、それをチェックすることができます。しかし、それはとても悪いようです。他にどのような方法がありますか?
私のお気に入りは、この小さな便利さでjQueryを拡張することです。
$.fn.exists = function () {
return this.length !== 0;
}
のように使われる:
$("#notAnElement").exists();
長さを使用するよりも明確です。
if ( $("#anid").length ) {
alert("element(s) found")
}
else {
alert("nothing found")
}
セレクタはjQueryオブジェクトの配列を返します。一致する要素が見つからない場合は、空の配列を返します。セレクタから返されたコレクションの.length
をチェックするか、最初の配列要素が 'undefined'であるかどうかをチェックすることができます。
IFステートメント内でany次の例を使用すると、すべて同じ結果が生成されます。セレクタが一致する要素を見つけた場合はtrue、そうでない場合はfalse.
$('#notAnElement').length > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined
私はこのようなことをするのが好きです:
$.fn.exists = function(){
return this.length > 0 ? this : false;
}
それで、あなたはこのようなことをすることができます:
var firstExistingElement =
$('#iDontExist').exists() || //<-returns false;
$('#iExist').exists() || //<-gets assigned to the variable
$('#iExistAsWell').exists(); //<-never runs
firstExistingElement.doSomething(); //<-executes on #iExist
Ruby on Rails からヒントを得たpresence
を使うのが好きです。
$.fn.presence = function () {
return this.length !== 0 && this;
}
あなたの例は次のようになります。
alert($('#notAnElement').presence() || "No object found");
あなたはまだブール演算子やif
を使うことができるので、私はそれが提案された$.fn.exists
より優れていると思いますが、真実の結果はより有用です。もう一つの例:
$ul = $elem.find('ul').presence() || $('<ul class="foo">').appendTo($elem)
$ul.append('...')
私の好みで、これがなぜjQueryに組み込まれていないのか私にはわかりません。
$.fn.orElse = function(elseFunction) {
if (!this.length) {
elseFunction();
}
};
こんな感じで使われる:
$('#notAnElement').each(function () {
alert("Wrong, it is an element")
}).orElse(function() {
alert("Yup, it's not an element")
});
あるいは、CoffeeScriptで見たように:
$('#notAnElement').each ->
alert "Wrong, it is an element"; return
.orElse ->
alert "Yup, it's not an element"
これはJQueryのドキュメントにあります。
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );