2010-03-03 206 views
41

有沒有更好的方法來選擇jQuery中的祖父母元素,以避免這種情況?jQuery:選擇祖父母

$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast"); 

謝謝。

+1

和孩子()。children()。children()。children(「。title」)? – aneuryzm 2010-03-03 15:35:01

+0

無法抗拒,您可以使用$(this).gparent(2)與我的downvoted答案中提供的代碼。不知道爲什麼它是downvoted,因爲它是解決方案,回答你的問題... – patrick 2018-01-18 11:46:26

回答

1

使用parents()您可以使用它匹配家長對選擇

http://api.jquery.com/parents/

還是parents()方法選擇器獲取元素的所有父項。然後,您可以搜索該集合,或者如果要影響所有祖先,可以對其進行迭代。

20

除了parents(),正如他們所說,你也應該check out closest()。在那裏的文檔中閱讀比較,但它的主要區別在於它只搜索一個結果,它包括$(this)它的搜索結果(如果你不夠詳細,可以從中找到你要搜索的東西)。優點和缺點。

5

我寫了這個簡單的插件,因爲我認爲我有一個明確的類選擇某處給我的錯誤。對於這種特殊情況,選擇祖父母似乎比$().parents()更直接。

那麼,我用這一次然後意識到我實際上有一個拼寫錯誤。不知道它真的有多大幫助。 $('myelem').gparent(2);讓你成爲'myelem'的祖父母。

(function($){ 
$.fn.gparent = function(recursion){ 
    if(recursion == undefined) recursion = 2; 
    if(typeof(recursion) == "number"){ 
     recursion = parseInt(recursion); 
     if(recursion > 0){ 
      gparent_holder = $(this); 
      for(var gparent_i = 0; gparent_i < recursion; gparent_i++){ 
       gparent_holder = gparent_holder.parent(); 
      } 
      return gparent_holder; 
     } 
     else return false; 
    } 
    else return false; 
} 
})(jQuery); 
+0

我喜歡這個解決方案。我們正在使用jQuery> 2.0,並且仍然沒有簡單,清晰的方法來瀏覽'k'級別。看起來像是添加到基本框架中的一件小事。 – 2014-07-22 14:56:39

+0

很好提出遞歸。遞歸函數對於像這樣的問題是一個很好的解決方案...但您的解決方案不是遞歸的。我發佈了一個遞歸片段作爲這個問題的答案 – patrick 2016-07-08 22:32:39

0

@Femi有了答案要做到這一點,並提到遞歸,但他的解決辦法是不遞歸的,以下是獲取項目的祖先遞歸jQuery的解決方案:

$.fn.gparent = function(recursion){ 
    console.log('recursion: ' + recursion); 
    if(recursion > 1) return $(this).parent().gparent(recursion - 1); 
    return $(this).parent(); 
}; 

如果這是你的HTML:

<div id='grandparent'> 
    <div id='parent'> 
    <div id='child'> 
     child 
    </div> 
    </div> 
</div> 

您可以撥打

console.log($('#child').gparent(2)); 

得到元素child的祖父母。 Here's the JSFiddle

+0

爲什麼地球上這樣會得到一個沒有評論的downvote ......它是遞歸的,它被記錄下來,小提供提供它來顯示它的工作原理,這是OP的問題的答案..如果沒有解釋,SO應該不可能倒下。現在一個完美的工作解決方案(我使用了很多!)沒有顯示爲有效的解決方案... – patrick 2018-01-18 11:43:54