是否有更好的方法来组合多种类型的选择器,即名称,类和:不是吗?

时间:2015-08-14 10:09:34

标签: jquery jquery-selectors

我试图在一些具有某个类但没有异常类的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)过滤,因为我只想附加一些特定的元素,而不是全部。这背后的原因是其他事件的其他事件监听器也适用于其他事件,例如clickmouseenter

1 个答案:

答案 0 :(得分:2)

您可以删除元素选择器:

$("body").on("change", ".action:not(.disabled)", function() { ... });

这将选择.action类且没有.disabled类的所有元素。

  

我不想全部附加,因此我定义了它们。

在这种情况下,您可以通过添加其他:not()语句进行过滤,也可以坚持使用已有的语句。 jQuery最终将这些选择器传递给JavaScript的本地document.querySelectorAll()方法,因此一个以逗号分隔的选择器字符串将是性能最高的方法。

例如,如果您不想定位span元素,则可以指定::not(span)