簡體   English   中英

如何使用jQuery遍歷祖先?

[英]how do i traverse ancestors with jQuery?

如何使用jQuery遍歷祖先?

當前代碼陷入了遞歸循環:

HTML:

<html>
    <body>
        <div>
            <ul>
                <li></li>
            </ul>
        </div>
    </body>
</html>

JS:

function traverse($node){
  while ( $node.get(0) !== $("html").get(0) ) {
    console.log($node);
    traverse($node.parent());
  }

}

//traverse($("ul li"));

要觀察該問題,請取消注釋最后一行,但要警告它可能會凍結瀏覽器。

在JSFiddle上也是如此: http : //jsfiddle.net/WpvJN/1/

您可以使用.parents()獲取集合,並使用.each()進行迭代:

$('ul li').parents().each(function () {
    console.log(this);
});

我希望您需要對遍歷進行限制,以防您尋找的父母不是您開始的祖先。 否則,您要么陷入無休止的循環,要么就沒父母了。

例如,可以執行一個通用功能,從一個元素到具有特定標簽名稱的父級(不是jQuery,但我確定可以在必要時進行轉換):

function upTo(tagName, el) {
  tagName = tagName.toLowerCase();

  // Make sure el is defined on each loop
  while (el && el.tagName && el.tagName.toLowerCase() != tagName) {
    el = el.parentNode;
  }
  return el;
}

一種替代方法是檢查el.parentNode並在沒有更多對象時停止。

HTML文檔中始終存在一個HTML節點,因此,只要您不從文檔節點開始,就始終可以到達該節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM