jQuery:select祖父母

有没有更好的方法来selectjQuery中的祖父母元素,以避免这种情况?

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

谢谢。

你可以使用parents()匹配select器的parents()方法

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

或者如果你使用1.4,有一个新的parentsUntil()方法

http://api.jquery.com/parentsUntil/

除了parents() ,正如他们所说,你也应该检查出closest() 。 阅读文档中的比较,但是它的主要区别在于它只search一个结果,它包含$(this)它所search的内容(如果你不够详细,可能会得到你正在search的东西) 。 优点和缺点。

我写了这个简单的插件,因为我认为我有一个明确的类select给我的错误。 对于这种特殊情况,select祖父母似乎比$().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 ); 

使用parents()select器来获取元素的所有父项。 然后,您可以search集合,或者如果要影响所有祖先,可以对其进行迭代。

@Femi有一个答案来做这件事,并提到recursion,但他的解决scheme是不recursion的,这里是一个recursion的jQuery解决scheme获取项目的祖先:

 $.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 ) ); 

得到元子的祖父母。 这是JSFiddle