选择器使用变量

lol*_*lol 1 jquery

通常,当我想检查父元素中是否有任何子元素被单击时,我使用如下所示的内容:

$(document).click(function (e) {
    alert($(e.target).is("#somediv *"));
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Fel*_*ing 5

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

if ($(e.target).closest(somediv).length > 0)
Run Code Online (Sandbox Code Playgroud)

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

$(e.target).parent().closest(somediv)
Run Code Online (Sandbox Code Playgroud)

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

somediv.click(function() {
   // click originated from inside the div
});
Run Code Online (Sandbox Code Playgroud)

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

$(e.target).is(somediv + ' *');    
Run Code Online (Sandbox Code Playgroud)