0

我在document. 我有一个 id 的 div parent。现在,每当点击事件发生时,document我都会尝试检查目标元素是否为子元素div ( id = parent )

   <div id="parent">
    <div id="c1">
     <div id="gc1">
     </div>
     <div id="gc2">
     </div>
     ...
    </div>
    ...
   </div>

为此,我编写了以下 jquery 代码:

$(document).click( function(e) {
     if($(e.target).parents("#parent").length > 0)  //this condition is not 
                                                      working as expected
     { }
});

我在这里做错了什么?

4

3 回答 3

1

如果您发布的代码是逐字记录的,那么您忘记将其声明e为回调函数的参数。

除此之外,您的代码看起来应该可以正常工作。但是,为了提高效率,您可以使用.closest()而不是.parents()因为它只会返回 0 或 1 个元素,而不是整个元素链。

于 2012-11-16T14:04:22.640 回答
1

你可以使用jQuery.contains()

if( $.contains( document.getElementById('parent'), e.target) ) {

}

这将检查目标是否包含容器中。

从文档:

注意:第一个参数必须是 DOM 元素,而不是 jQuery 对象或纯 JavaScript 对象。

这就是 getElementById 的原因。

于 2012-11-16T14:08:44.110 回答
0

编辑使用最近的...工作FIDDLE

首先...这可能无法完全回答您的问题,但您需要点击功能中的 (e)。

$(document).click( function(e) {
 if($(e.target).closest("#parent").length > 0) 
 { }
});
于 2012-11-16T14:05:39.480 回答