Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Return";“真的”;在空jQuery选择器数组上?_Javascript_Jquery_Jquery Selectors_Boolean - Fatal编程技术网

Javascript Return";“真的”;在空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 >

我正致力于创建一种更具语义的方法,用jQuery检查元素。使用
$(“#元素”).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.");