我正在創建一個用jQuery檢查元素的更多語義方法。使用$("#element").length > 0
只是不真的感覺非常好措辭給我,讓我做我自己的選擇除了用於.is
:在空的jQuery選擇器數組上返回「True」?
if($("#element").is(":present")) {
console.log("It's aliiiveeee!!");
}
這部分是容易的,就像這樣:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
}
});
我想更進一步,並可以很容易地看到,如果一個元素不存在,使用類似的語法:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
},
absent: function(a) {
return $(a).length === 0;
}
});
$(function() {
if($("#element").is(":absent")) {
console.log("He's dead, Jim.");
}
});
但是,這部分是出奇的難做到。我認爲這是因爲我正在削減返回的元素以獲得結果,並將選擇器分配給.length === 0與請求不使用元素相同:無論如何返回false。
我已經嘗試了很多不同的方式來扭轉的東西,得到這個當元素不存在返回true,false,如果它:
return $(a).length === 0;
return !($(a).length > 0);
if(!($(a).length > 0)) {
return true;
}
if($(a).length > 0) {
return false;
} else {
return true;
}
return !!($(a).length === 0);
// etc...
有沒有一種簡單的方法如果元素不存在,只需返回true,如果返回false,則返回false?
因此,'.is'並不是真正爲匹配的選擇器組中沒有元素存在時返回true而設計的。 我考慮過的另一個選擇就是使用: 'if($(「#element」)。is(「:not(:present)」)){console.log(「他已經死了,Jim。」 ); }' 但奇怪的是,這也不起作用。 – 2012-04-15 21:23:53
@Code Junkie:同樣,你沒有任何使用'.is()'的元素,所以這個函數根本不會被調用。無論你選擇什麼樣的選擇器,什麼都不會發生! – BoltClock 2012-04-15 21:25:58
那麼可能無法在空的選擇器結果上返回true? – 2012-04-15 21:36:14