1

通常,当我想检查是否单击了父元素中的任何子元素时,我会使用以下内容:

$(document).click(function (e) {
    alert($(e.target).is("#somediv *"));
}

但现在我有somediv一个变量。我试过了:

var somediv = $(this);
$(document).click(function (e) {
    alert($(e.target).is($(somediv, "*")));
}

但它不起作用。我怎样才能做到这一点?这是检测元素或任何子元素是否被点击的最佳方法吗?

4

4 回答 4

5

无论somediv是 DOM 元素还是选择器,都使用.closest [docs]

if ($(e.target).closest(somediv).length > 0)

这将向上遍历 DOM,从开始e.target并测试任何祖先(或元素本身)是否为somediv. 如果要排除e.target,请从其父级开始:

$(e.target).parent().closest(somediv)

另一种方法,取决于整体上下文,可能是将事件处理程序简单地绑定到somediv

somediv.click(function() {
   // click originated from inside the div
});

没有简单的方法可以从现有的 DOM 元素创建选择器。如果somediv包含选择器,那么您可以使用字符串连接来组合它:

$(e.target).is(somediv + ' *');    
于 2012-09-28T15:50:40.667 回答
1

试试下面,

演示:http: //jsfiddle.net/GUAFW/2/

$(function () {
    var somediv = $('#container');
    $(document).click(function (e) {
        alert($(e.target).parent().is(somediv));
        //                   ^__ Just immediate childrens :(
    });
});

您可以e.target != this在处理程序内部检查它是父元素还是来自子元素。

一个例子:

HTML:

<div id="container">
   <div class="child"></div><div class="child">
</div>

JS:

$(function () {
    $('#container').click(function (e) {
        alert(e.target != this);
    });
});
于 2012-09-28T15:55:51.377 回答
0

假设someDiv有元素的字符串文字标识符,它不会以 为前缀#,所以:

$(document).click(function (e) {
  if ($(e.target).is("#" + somediv + " *")) {
    // some code
  } 
}
于 2012-09-28T15:48:46.500 回答
0

试试这种方法.. 而不是 .is() 尝试使用相等选择器..

<div  class="hide"> 
    <span class="green" id="somediv"> YOOO </span>
</div>​

$('div').click(function(e) {
    if (e.target != this) {
        alert(((e.target.id) == 'somediv'));
    }
});​

检查小提琴

于 2012-09-28T15:49:08.103 回答