选择所有,不包括"选择器



我有一个div,其中包含许多子元素,例如其他div, span和链接。

是否有可能在JQuery选择器中指定,我想调用一个函数每当这个DIV(包括DIV本身)的元素被点击,除了所有链接(a),这个函数不应该被调用?

与其选择所有元素并排除某些元素并将事件处理程序绑定到每个元素,更简单的方法(imo)是将事件处理程序仅附加到div并测试链接是否被单击(事件委托):

$('#yourDiv').click(function(event) {
    if(event.target.nodeName !== 'A') {
        // do your stuff
    }
});

这只会在链接没有任何其他元素作为子元素的情况下起作用。

更健壮可能使用.delegate [docs]:not [docs]伪选择器:

$ (' # yourDiv ') .delegate(":(a)","点击",函数(事件){//做你自己的事});

更新:显然,您必须向div添加另一个click事件处理程序,以便能够检测div本身的点击(我使用委托选择器的测试仅失败):

$('#yourDiv')
 .delegate(':not(a)', 'click', handler)
 .click(function(event) {
     if(event.target === this) {  // only if the `div` was clicked
         handler.apply(this, arguments);
     }
 });

这里,handler是您想要执行的实际事件处理程序。通过使用额外的函数,您不必重复代码。

$('div#div_id, div#div_id *:not(a)').click(function(){
    // do whatever you like here
});

您可以使用jQuery not()方法来实现您正在寻找的内容。

$('div, div *').not('a').click(function(){
    //handle click  
}); 

也可以使用:not()选择器

$('div, div *:not(a)').click(function(){
    //handle click  
}); 

您可以使用.not()方法来排除元素