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

时间:2014-08-15 10:12:48

标签: javascript jquery

即使用户点击.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/

6 个答案:

答案 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>

更新小提琴:http://jsfiddle.net/vv9L1eog/7/

答案 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' );
    }
});

Here's a fiddle