2009-11-23 89 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