通常当我想检查父元素中是否有任何子元素被点击时,我会使用以下内容:
$(document).click(function (e) {
alert($(e.target).is("#somediv *"));
}
但现在我在变量中有somediv
。我试过了:
var somediv = $(this);
$(document).click(function (e) {
alert($(e.target).is($(somediv, "*")));
}
但它不起作用。我怎样才能做到这一点?它是检测元素或任何子元素是否被单击的最佳方法吗?
答案 0 :(得分:5)
无论somediv
是DOM元素还是选择器,都要使用.closest
[docs]:
if ($(e.target).closest(somediv).length > 0)
这将从e.target
开始遍历DOM并测试任何祖先(或元素本身)是否为somediv
。如果要排除e.target
,请从其父级开始:
$(e.target).parent().closest(somediv)
另一种方式,取决于整体上下文,可以简单地将事件处理程序绑定到somediv
:
somediv.click(function() {
// click originated from inside the div
});
没有简单的方法可以从现有DOM元素创建选择器。如果somediv
包含选择器,那么您可以使用字符串连接来组合它:
$(e.target).is(somediv + ' *');
答案 1 :(得分:1)
尝试以下,
DEMO: 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);
});
});
答案 2 :(得分:0)
假设someDiv
具有元素的字符串文字标识符,则不会以#
为前缀,因此:
$(document).click(function (e) {
if ($(e.target).is("#" + somediv + " *")) {
// some code
}
}
答案 3 :(得分: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'));
}
});