我想排除点击,即使当用户点击。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');
});
http://jsfiddle.net/vv9L1eog/1/您需要使用带有p而不是body的":not"
过滤器。
$("body p:not(.special)").click(function () {
alert('test');
});
编辑:用于单击页面上的任何位置
$("body").click(function () {
alert('test');
}).find(".special").click(function(){return false;});
这里的小提琴
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>
标记是块级元素。示例中的特殊 DOM是页面中的整行。
如果您只想禁用在文本上的单击,请将文本换行到内联元素中。:
<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>
更新小提琴:http://jsfiddle.net/vv9L1eog/7/
这个怎么样:
$('html').click(function(e) {
if (! $(e.target).is('.special') ) {
alert('test');
}
});
当你点击页面上的任何地方时,会提示一个警告。
你的选择器有点不对劲,
试题:
$("body :not(.special)").click(function () {
alert('test');
});
这个适合我,http://jsfiddle.net/3q0kLr5w/1/
$("body").children().not('.special').click(function () {
alert('test');
});
甚至$("身体*:没有(。)")。点击(function () {alert('测试');});
您最好将单个单击处理程序附加到正文,并测试event.target
以检查它是否为.special
:
$('body').on('click', function(e) {
if (! $( e.target ).is('.special') ) {
alert( 'test' );
}
});