有没有更好的方法来选择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