jQuery的$( 'HTML,身体')否()(jQuery $('html

2019-08-01 15:07发布

在这里 -我要警觉,当你点击任何地方,但没有对DIV发生。

当我点击的div,警报也表示。

JS

$("html, body").not('.entry-content').click(function() {            
    alert('d');                        
}); ​

HTML

<div class="entry-content"> kkkk </div>​

Answer 1:

您可以使用事件参数,看看到底点击了哪个目标并返回false

$("html, body").click(function(e) {
    if ($(e.target).hasClass('entry-content')) {
        return false;
    }
    alert('d');
});​

http://jsfiddle.net/keyZw/

您正在使用的。不是()过滤器..但它仍然是你的HTML /身体的一部分..所以你需要处理它的点击功能里面。 你也只是结合的Click事件..

所以

 // find html,body - not ones with class=entry-content - bind click
 $("html, body").not('.entry-content')

所以,这并不妨碍该警报作为你的div仍然是体内

如前所述..你只需要绑定到真身

$("body").click(function(e) {
    if ($(e.target).hasClass('entry-content')) {
        return false;
    }
    alert('d');
});​


Answer 2:

$("html *").click(function(e) {
    if ( e.target.className.indexOf("entry-content") < 0 ) {
        alert('d');
    }
}); 

DEMO


原始代码不起作用,因为.not()适用于选择在它的面前- htmlbody 。 他们俩有类的entry-content ,所以事件触发



Answer 3:

您也可以停止传播点击的元素上

$("body").click(function() {
    alert();
});

$(".entry-content").click(function(e) {
    e.stopPropagation();
});

通过点击一个子元素也适用

<div class="entry-content">Element
  <span>Sub element</span>
</div>​

退房的小提琴



Answer 4:

问题是,您要添加单击事件的HTML和BODY标签。 所以,首先你会得到2个警报,当你在身体区域中单击。 同时,由于事件向上传播,点击相关的DIV将传播click事件达到身体和HTML以及方式。 所以,你需要做的点击处理程序内部检查,以确定你是否不想显示警告消息。

我修改你的jsfiddle下面只包括HTML在你的选择,并以检查entry-content的处理程序中的类。

http://jsfiddle.net/m2eqS/6/

$("html").click(function(e) {
    if(!$(e.target).hasClass("entry-content")){
      alert('TEST');
   }                        
}); ​

结合HTML和身体之间的区别是,如果你希望能够在任何地方点击页面上,下面的内容/体的结束位置,你应该使用HTML。 否则,用身体。



文章来源: jQuery $('html, body').not()
标签: jquery click