我总是想知道为什么如果我试图通过id结构中不存在的id选择器来查找元素,jQuery将返回true。
像这样:
<div id="one">one</div>
<script>
console.log(!!$('#one')) // prints true
console.log(!!$('#two')) // is also true! (empty jQuery object)
console.log(!!document.getElementById('two')) // prints false
</script>
我知道我可以使用!!$('#two').length
因为长度=== 0,如果对象是空的,但它似乎是合乎逻辑,我认为,如果发现了一个选择将返回该元素,否则null
(就像原生document.getElementById
一样)。
F.ex,这个逻辑不能在jQuery的完成:
var div = $('#two') || $('<div id="two"></div>');
难道不更符合逻辑,如果如果没有找到ID选择返回null?
有人吗?
我也在想这是其中一个原因。但以这种方式抑制错误真的是一个好主意吗?如果没有找到id,我确定想知道抛出错误的位置而不是调试每个链。 – David 2010-01-16 15:41:41
如果您使用id选择器,这可能是您想要的行为,因为id(通常)是唯一的。但是如果您使用类选择器来关闭页面上的所有对话框/弹出窗口,该怎么办?您不希望函数仅仅因为用户当前没有打开任何对话框而抛出错误。你会希望它默默无闻。 – Dan 2010-01-17 12:59:48
JavaScript没有任何称为NullReference异常的东西。也许你的意思是'ReferenceError'? – 2010-01-17 14:15:52