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)
你可以简单地使用
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)
例子.
| 归档时间: |
|
| 查看次数: |
2670 次 |
| 最近记录: |