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

标签 javascript jquery jquery-selectors boolean

我正在努力创建一种更加语义化的方式来使用 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/

相关文章:

javascript - 基于标签宽度的可扩展消息 div

javascript - 数据表。服务器端处理。如何获取表的信息?

javascript - 当选项卡处于非事件状态时,如何使进度条的 setInterval 起作用

jquery-selectors - 如果图像父级没有某个类,jQuery 选择 div 中的图像

jquery - 根据复选框选择向 <li> 添加或删除项目

javascript - 下拉弹跳问题

javascript - Qunit 参数化测试和模拟

javascript - 隐藏侧边栏和下拉菜单

javascript - 同位素在破坏布局的元素样式中进行奇怪的变换,为什么?

jquery计算具有重复选择的所选选项ID的值