我试图在一些具有某个类但没有异常类的DOM元素上附加一个事件监听器。
$("body").on('change',
'select.action:not(.disabled),
textarea.action:not(.disabled),
input[type=\'text\'].action:not(.disabled)',
function() {
//...
}
);
我只是想知道是否有更好的方法来编写它,因为我希望事件监听器可以监听的元素可能会增长。像这样:
$("body").on('change', '(select, textarea, input[type=\'text\']).action:not(.disabled)',
function() {
//...
}
);
另外,我不想在附加到更一般的元素之后过滤元素。
注意:我没有按.action:not(.disabled)
过滤,因为我只想附加一些特定的元素,而不是全部。这背后的原因是其他事件的其他事件监听器也适用于其他事件,例如click
和mouseenter
。
答案 0 :(得分:2)
您可以删除元素选择器:
$("body").on("change", ".action:not(.disabled)", function() { ... });
这将选择.action
类且没有.disabled
类的所有元素。
我不想全部附加,因此我定义了它们。
在这种情况下,您可以通过添加其他:not()
语句进行过滤,也可以坚持使用已有的语句。 jQuery最终将这些选择器传递给JavaScript的本地document.querySelectorAll()
方法,因此一个以逗号分隔的选择器字符串将是性能最高的方法。
例如,如果您不想定位span
元素,则可以指定::not(span)
。