如果jQuery没有在选择器中找到元素,jQuery会抱怨/抛出错误吗?

时间:2016-01-03 20:46:46

标签: javascript jquery

我有点困惑,假设我做了各种选择,包括单一和多种选择:

$('#button1').off('handler').on('handler')
$('input[id*="my_button"]').each(function() {

但在我的HTML中,没有带ID的元素" button1" (例如1)或" my_button"的任何子串。 (例2)。

如果找不到任何元素,是否会出现JS错误,或者代码是否会默默执行?

我已经看过两者了,如果没有匹配的元素,我想静默处理/跳过。

2 个答案:

答案 0 :(得分:6)

不,它不会出错。它将返回一个空结果集。对它的任何操作都将被忽略。

答案 1 :(得分:3)

“单个”和“多个”选择器之间没有区别。就jQuery而言,它是一个(可能是空的)元素组。

例如,

.on.off将对组中的每个元素应用/删除事件处理程序。如果该组恰好是空的,则没有任何反应。

在某些方面,这是一件好事 - 它不需要手动检查它。但是,我倾向于将其视为一个问题。比方说我写道:

document.getElementById('button1').addEventListener(...);

但页面上不存在#button1。我得到一个错误告诉我这样的(有点 - “无法获取属性'addEventListener'的undefined或null引用”并不是很明显,但你学会理解它)我可以通过修复缺少所需的问题来解决问题元素,或添加一个检查明确说“如果没有这样的元素就没问题。”

然而在jQuery中你没有得到那个选择。你的选择器错字?空集合处理得很好,事件神秘地消失了。我个人认为这是一件坏事,但是jQuery无法知道你是否打算将零个,一个或几百个元素用于匹配......