如何使用全局选择器响应除一个元素之外的所有单击事件?

如果我有一个按钮:

通常我会写:

 $("#button1").click(function () { //do something } 

但我想定义一个响应所有点击事件的function, 除非有人点击此按钮。

是否有一个选择器允许我定位除button1之外的文档中的所有其他可点击元素?

我知道你已经接受了上面的答案,但我会强烈反对这一点。 您可以使用事件委派来执行您想要的操作,同时减少dom的开销。

我知道.live()存在但是太多的实时处理程序也会影响性能。 我更喜欢事件代表旧式。

在这里演示

 $(function(){ $('body').click( clickFn ); }); function clickFn( ev ) { if (ev.target.id != 'button1' ){ //do your stuff console.log('not a #button1 click'); } } 

你可以使用:not selector :

 $('button:not(#button1)').click(function(){ //Do something }); 

上面的选择器将匹配除id =“button1”之外的所有按钮元素。

如果你真的要选择body标签下的所有元素,你可以使用“All” ( * )选择器,也可以使用:not(selector)或.not(expr)排除元素:

 $('body *:not(#button1)').click(function(){ //Do something }); 

要么

 $('body *').not('#button1').click(function(){ //Do something }); 

如果这样做,您可能会遇到一些事件冒泡或传播问题,您可以使用event.stopPropagation函数处理此问题。

当前的CSS 3 Selectors Candidate Recommendation定义了:root pseuedo类 。

:root伪类表示作为文档根的元素。 在HTML 4中,这始终是HTML元素。

您可以将事件侦听器附加到根,然后检查接收到单击的元素。 如果它是你要忽略的元素返回,否则做你想做的任何事情。