有沒有更好的方法來選擇jQuery中的祖父母元素,以避免這種情況?jQuery:選擇祖父母
$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast");
謝謝。
有沒有更好的方法來選擇jQuery中的祖父母元素,以避免這種情況?jQuery:選擇祖父母
$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast");
謝謝。
如果你使用1.4有一個新的parentsUntil()
方法
使用parents()
您可以使用它匹配家長對選擇
http://api.jquery.com/parents/
還是parents()
方法選擇器獲取元素的所有父項。然後,您可以搜索該集合,或者如果要影響所有祖先,可以對其進行迭代。
除了parents()
,正如他們所說,你也應該check out closest()
。在那裏的文檔中閱讀比較,但它的主要區別在於它只搜索一個結果,它包括$(this)
它的搜索結果(如果你不夠詳細,可以從中找到你要搜索的東西)。優點和缺點。
我寫了這個簡單的插件,因爲我認爲我有一個明確的類選擇某處給我的錯誤。對於這種特殊情況,選擇祖父母似乎比$().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);
我喜歡這個解決方案。我們正在使用jQuery> 2.0,並且仍然沒有簡單,清晰的方法來瀏覽'k'級別。看起來像是添加到基本框架中的一件小事。 – 2014-07-22 14:56:39
很好提出遞歸。遞歸函數對於像這樣的問題是一個很好的解決方案...但您的解決方案不是遞歸的。我發佈了一個遞歸片段作爲這個問題的答案 – patrick 2016-07-08 22:32:39
@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
爲什麼地球上這樣會得到一個沒有評論的downvote ......它是遞歸的,它被記錄下來,小提供提供它來顯示它的工作原理,這是OP的問題的答案..如果沒有解釋,SO應該不可能倒下。現在一個完美的工作解決方案(我使用了很多!)沒有顯示爲有效的解決方案... – patrick 2018-01-18 11:43:54
和孩子()。children()。children()。children(「。title」)? – aneuryzm 2010-03-03 15:35:01
無法抗拒,您可以使用$(this).gparent(2)與我的downvoted答案中提供的代碼。不知道爲什麼它是downvoted,因爲它是解決方案,回答你的問題... – patrick 2018-01-18 11:46:26