即使用户点击.special,我也要排除点击,但它似乎不起作用?
<body>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p class="special">special</p>
<p>normal</p>
<p>normal</p>
</body>
我的js
$("body:not(.special)").click(function () {
alert('test');
});
答案 0 :(得分:3)
body
和:not
之间的空格。这意味着它选择了它的继承者。
$("body :not(.special)").click(function () {
alert('test');
});
JSFiddle:http://jsfiddle.net/vv9L1eog/2/
更新:除特殊DOM
以外的整个页面中的提醒当您指的是整页时,您需要绑定html
而不是body
。
$("html").click(function (e) {
if (!$(e.target).is('.special')) {
console.log(e.target);
alert('test');
}
});
此外,您的<p>
代码为block-level element。示例中的特殊 DOM是页面中的整行。
如果您只想禁用点击特殊文字,请将文字换行至inline element。为:
<body>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p>normal</p>
<p><span class="special">special</span></p>
<p>normal</p>
<p>normal</p>
</body>
答案 1 :(得分:3)
您需要应用":not"
过滤器,而不是身体。
$("body p:not(.special)").click(function () {
alert('test');
});
编辑:
点击页面上的任意位置
$("body").click(function () {
alert('test');
}).find(".special").click(function(){return false;});
小提琴here
答案 2 :(得分:2)
这个怎么样:
$('html').click(function(e) {
if (! $(e.target).is('.special') ) {
alert('test');
}
});
点击页面上的任意位置时会提示您提醒。
答案 3 :(得分:0)
您的选择器稍微偏出,
尝试:
$("body :not(.special)").click(function () {
alert('test');
});
答案 4 :(得分:0)
这对我有用,http://jsfiddle.net/3q0kLr5w/1/
$("body").children().not('.special').click(function () {
alert('test');
});
甚至 $(&#34; body *:not(.special)&#34;)。click(function(){ 警报(&#39;测试&#39); });
答案 5 :(得分:0)
最好将单击处理程序附加到正文,并测试event.target
以检查它是否为.special
:
$('body').on('click', function(e) {
if (! $( e.target ).is('.special') ) {
alert( 'test' );
}
});