Javascript Return";“真的”;在空jQuery选择器数组上?
我正致力于创建一种更具语义的方法,用jQuery检查元素。使用Javascript Return";“真的”;在空jQuery选择器数组上?,javascript,jquery,jquery-selectors,boolean,Javascript,Jquery,Jquery Selectors,Boolean,我正致力于创建一种更具语义的方法,用jQuery检查元素。使用$(“#元素”).length>0对我来说真的不太合适,所以我正在为中使用的选择器添加项做准备。是: if($("#element").is(":present")) { console.log("It's aliiiveeee!!"); } 那部分很简单,就像这样: $.extend($.expr[':'],{ present: function(a) { return $(a).length >
$(“#元素”).length>0对我来说真的不太合适,所以我正在为中使用的选择器添加项做准备。是
:
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?0
在JavaScript中是“falsy”
您只需返回$(a) .length
如何:
if ( !$(a)[0] ) {
// $(a) is empty
}
因此,$(a)[0]
检索jQuery对象中的第一个元素。如果该元素为null/未定义,则表示jQuery对象为空。的定义为:
if($("#element").is(":present")) {
console.log("It's aliiiveeee!!");
}
根据选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回true
问题是,由于您没有元素,因此其中一个元素不可能匹配某些条件。jQuery甚至没有调用代码,因为没有元素
编辑:稍微澄清一下,对象中的每个元素都会调用代码一次(至少在有一个元素返回true之前)。没有元素意味着永远不会调用代码<代码中的code>a
始终是单个元素
EDIT2:考虑到这一点,这将是当前的一个更有效的实现:
$.extend($.expr[':'],{
present: function(a) {
return true;
}
});
你可以简单地使用
if($('element').length) // 1 or 0 will be returned
或
.鉴于当集合为空时,$().is()
甚至不会运行,:present
选择器是多余的。因此,与其玩$.expr[':']
,我宁愿扩展$.fn
以包含适当的函数,例如:
$.fn.extend({
hasAny: function() {
return this.length > 0;
},
});
或
我个人选择这种方法的原因是,选择器通常用于检查元素的特定属性(比较:选中的,:启用的,:选中的,:悬停的,等等),而不是整个jQuery元素集的属性(例如.size()
,.index()
)
使用方法当然与以下类似:
if ($('#element').isEmpty())
console.log("He's dead, Jim.");
虽然这是真的,但您可以将任何您想要的东西放在那里,如果没有元素,代码将永远不会执行。因此,.is
不是专门为在匹配的选择器集中没有元素时返回真的而设计的吗?我考虑过的另一个选项是使用:if($(“#element”).is(“:not(:present)”){console.log(“他死了,吉姆”);}
,但奇怪的是,这也不起作用。@code瘾君子:同样,你没有任何元素可以使用.is()
,所以这个函数根本不会被调用。不管你向它扔什么选择器,什么都不会发生!所以可能没有办法在一个空的选择器结果上返回true?我想我开始明白了。所以,当并没有任何东西传递给jQuery时,它就不会运行了?哦,第二次编辑非常好!我来试试。是的,这可能最终是一个更好的方法。我主要是在玩弄所有的选择,看看最好的方法是什么。下一步我要玩这个^^
if ($('#element').isEmpty())
console.log("He's dead, Jim.");