在空jQuery选择器数组上返回"True"?

Cod*_*kie 15 javascript jquery boolean jquery-selectors

我正在努力创建一种使用jQuery检查元素的更加语义的方法.使用$("#element").length > 0just对我来说并没有真正的措辞,所以我将自己的选择器添加用于.is:

if($("#element").is(":present")) {
  console.log("It's aliiiveeee!!");
}
Run Code Online (Sandbox Code Playgroud)

那部分很容易,像这样:

$.extend($.expr[':'],{
    present: function(a) {
        return $(a).length > 0;
    }
});
Run Code Online (Sandbox Code Playgroud)

我想更进一步,使用类似的语法轻松查看元素是否不存在:

$.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.");
  }
});
Run Code Online (Sandbox Code Playgroud)

但这部分令人惊讶地难以做到.我认为这是因为我正在削减返回的元素以获得结果,并且将选择器削减到.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...
Run Code Online (Sandbox Code Playgroud)

如果元素不存在,是否有一种简单的方法可以使其返回true,如果元素不存在则返回false?

Jam*_*gne 14

定义is:

根据选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定的参数匹配,则返回true.

问题是,由于您没有元素,因此您的某个元素不可能与某些条件匹配.jQuery甚至没有调用你的代码,因为没有元素.

编辑:为了略微澄清,您的代码被调用一次对象中的每个元素(至少在一个返回true之前).没有元素意味着永远不会调用代码. a在你的代码中始终是一个单独的元素.

EDIT2:考虑到这一点,这将是一个更有效的实现present:

$.extend($.expr[':'],{
    present: function(a) {
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)


The*_*pha 5

你可以简单地使用

if(?$('element').length) // 1 or 0 will be returned
Run Code Online (Sandbox Code Playgroud)

要么

$.extend($.expr[':'],{
    present: function(a) {
        return $(a).length;
    }
});

if($('#element').is(':present'))
{
    // code for existence
}
else
{
    // code for non-existence
}
Run Code Online (Sandbox Code Playgroud)

例子.