jQuery + Not Selector

时间:2011-11-15 17:44:35

标签: jquery jquery-selectors

作为Javascript和jQuery的新手,我不确定这根本不可能,或者我只是做了一个完全愚蠢的错误:

我想在div本身以外的任何点击中隐藏div

我已将代码简化为演示目的:

HTML

<html>
    <div class="tooltip">
        Bla Bla Bla
    </div>
</html>

的jQuery

$('html:not(.tooltip)').click(function() {

    $('.tooltip').hide();

});

演示

http://jsfiddle.net/yCx6F/1/

4 个答案:

答案 0 :(得分:5)

添加空格:

$('html :not(.tooltip)')

当您说html:not(...)时,您正在寻找与您的选择器不匹配的所有html元素。

添加空格会查找html元素的子元素,这就是您想要的。

看看这是否符合您的要求:http://jsfiddle.net/yCx6F/2/


实际上,你应该这样做:

$('.tooltip').click(function(e) {
  e.stopPropagation();
});

// Once the `<div>` is created, in the same function:

$(document).one(function() {
  $('.tooltip').hide();
});

答案 1 :(得分:2)

我会做这样的事情:

$(document).click(function(ev) {
    if (!$(ev.target).is('.tooltip')) $('.tooltip').hide();
});

答案 2 :(得分:2)

试试这个......

$('*:not(.tooltip)').click(function() {
    $('.tooltip').hide();
});

$('.tooltip').click(function(e) {
    e.stopPropagation();
});

答案 3 :(得分:0)

你错过了一个空间。

$('html :not(.tooltip)').click(function() {

    $('.tooltip').hide();

});

$('html:not(.tooltip)').click(function() {

表示任何不是.tooltip

的HTML元素
$('html :not(.tooltip)').click(function() {

表示HTML中不是.tooltip

的任何元素

<强> Example here