Jquery not() select在我的情况下不起作用



我想排除点击,即使当用户点击。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' );
    }
});

Here's fiddle

最新更新