我正在努力创建一种更加语义化的方式来使用 jQuery 检查元素。使用 $("#element").length > 0
对我来说真的感觉不太好,所以我正在添加自己的选择器以用于 .is
:
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?
最佳答案
的定义是
:
Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
问题是因为您没有元素,所以您的元素之一不可能匹配某些条件。 jQuery 甚至不会调用您的代码,因为没有元素。
编辑:稍微澄清一下,您的代码会为对象中的每个元素调用一次(至少直到一个返回 true)。没有元素意味着永远不会调用代码。 a
在您的代码中始终是单个元素。
EDIT2:考虑到这一点,这将是 present
的更有效实现:
$.extend($.expr[':'],{
present: function(a) {
return true;
}
});
关于javascript - 在空 jQuery 选择器数组上返回 "True"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166075/