2009-11-23 91 views
1

我想知道DOM元素a是否包含DOM元素b(也就是说,如果a是DOM树中的祖先)。因此,类似于:jquery'包含'DOM元素而不是选择器

$(b).closest(a); 

但是其中'a'是此处的DOM节点,而不是选择器。

jQuery可以帮助吗?我可以找到的所有有用的函数都使用选择器字符串而不是元素,如果您的DOM元素是匿名的,这些功能并没有什么帮助。

+0

在当前版本的jQuery,'最接近()'[不接受](http://api.jquery.com/closest/)DOM节点作为参数。 – thorn 2013-05-22 07:47:55

回答

0

啊哈,我搜索悲惨地失败了,但一个同事找到了答案已经在周围,但Testing objects for ancestor/descendent relationship in JavaScript or Jquery这个问题是问在这样一个不同的方式,我没有找到它:

if ($(obj1).parents().index(obj2) >= 0) { 
    // obj1 is a descendant of obj2 
} 

仍不如尽管我期待的效率很高,('找到所有的父母,然后检查一场比赛'与'加紧寻找比赛的树')。

还有 http://plugins.jquery.com/project/ancestry,它提供了我正在谈论的功能。

更新:

if($(obj1).parents.eq(obj2)) { ... 

也适用,并且稍微整洁。父母名单不会那么长,所以这应该是相当有效的。

+0

jQuery find()方法更适合于此目的。 – Technowise 2009-11-23 11:52:44

+0

“$(parent).find(”...呃,什么?如果你有什么是一个未命名的DOM节点,那么你不能将它需要的选择器作为参数,除非我错过了某些东西。 – ijw 2009-11-23 11:56:47

1

以下是Traversing的文档。我建议你使用:

  • find()找到特定类型的后代,也许从文件开始本身
  • parents()找到DOM树特定类型的父母从X元素开始
+0

As我说,...“这里的'a'是一个DOM节点,而不是选择器' – ijw 2009-11-23 12:10:15

+0

你在说这个吗?https://developer.mozilla.org/En/XBL/XBL_1.0_Reference/Anonymous_Content – 2009-11-23 15:03:09

+0

不,我在谈论一个DOM节点,我有一个引用但没有选择器,对我来说,它只是一个引用,而且很难将该引用转换为选择器,因为它可能没有ID - 也就是说,它是无名的,或者匿名 – ijw 2009-11-23 16:16:13