如何使用全局选择器响应除一个元素之外的所有单击事件?
如果我有一个按钮:
通常我会写:
$("#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
元素。
您可以将事件侦听器附加到根,然后检查接收到单击的元素。 如果它是你要忽略的元素返回,否则做你想做的任何事情。