我有点困惑,假设我做了各种选择,包括单一和多种选择:
$('#button1').off('handler').on('handler')
$('input[id*="my_button"]').each(function() {
但在我的HTML中,没有带ID的元素" button1" (例如1)或" my_button"的任何子串。 (例2)。
如果找不到任何元素,是否会出现JS错误,或者代码是否会默默执行?
我已经看过两者了,如果没有匹配的元素,我想静默处理/跳过。
答案 0 :(得分:6)
不,它不会出错。它将返回一个空结果集。对它的任何操作都将被忽略。
答案 1 :(得分:3)
“单个”和“多个”选择器之间没有区别。就jQuery而言,它是一个(可能是空的)元素组。
例如, .on
和.off
将对组中的每个元素应用/删除事件处理程序。如果该组恰好是空的,则没有任何反应。
在某些方面,这是一件好事 - 它不需要手动检查它。但是,我倾向于将其视为一个问题。比方说我写道:
document.getElementById('button1').addEventListener(...);
但页面上不存在#button1
。我得到一个错误告诉我这样的(有点 - “无法获取属性'addEventListener'的undefined或null引用”并不是很明显,但你学会理解它)我可以通过修复缺少所需的问题来解决问题元素,或添加一个检查明确说“如果没有这样的元素就没问题。”
然而在jQuery中你没有得到那个选择。你的选择器错字?空集合处理得很好,事件神秘地消失了。我个人认为这是一件坏事,但是jQuery无法知道你是否打算将零个,一个或几百个元素用于匹配......