有没有更好的方法来选择jQuery中的祖元素以避免这种情况?
$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast");
谢谢。
jqjz2hbq1#
您可以使用parents()方法,该方法将父对象与选择器进行匹配http://api.jquery.com/parents/或者,如果您使用的是1.4,则有一个新的parentsUntil()方法http://api.jquery.com/parentsUntil/
parents()
parentsUntil()
83qze16e2#
除了parents()之外,正如他们所说的,你还应该check out closest()。阅读文档中的比较,但它的主要区别是它只搜索一个结果,并且它在搜索内容中包含$(this)(如果你不够具体,可能会得到你正在搜索的东西)。
closest()
$(this)
4szc88ey3#
我写了这个简单的插件,因为我认为我有一个明确的类选择给我错误的地方。选择祖父母似乎比$().parents()更直接的特殊情况。嗯,我用过一次,然后意识到我实际上有一个拼写错误。不知道它到底有多大帮助。$('myelem').gparent(2);让你成为'myelem'的祖父母。
$().parents()
$('myelem').gparent(2);
(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 );
pb3s4cty4#
使用parents()选择器获取元素的所有父元素。然后,您可以搜索集合,或者如果您想影响所有祖先,则可以迭代它。
k3fezbri5#
@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的祖父
child
nr9pn0ug6#
使用parents()和children()得到相同的结果。示例而不是使用此:
children()
$(this).parent().parent().parent().children(".title").fadeIn("fast");
你可以使用这个:
$(this).parents().children(".title").fadeIn("fast");
xoefb8l87#
基本示例
<div id="europe"> <div> <span id="denmark">Minimum Stok</span> </div> </div> $('span#denmark').parents("div#europe").attr('class', 'place')
结果;
<div id="europe" class="place"> <div> <span id="denmark">Minimum Stok</span> </div> </div>
7条答案
按热度按时间jqjz2hbq1#
您可以使用
parents()
方法,该方法将父对象与选择器进行匹配http://api.jquery.com/parents/
或者,如果您使用的是1.4,则有一个新的
parentsUntil()
方法http://api.jquery.com/parentsUntil/
83qze16e2#
除了
parents()
之外,正如他们所说的,你还应该check outclosest()
。阅读文档中的比较,但它的主要区别是它只搜索一个结果,并且它在搜索内容中包含$(this)
(如果你不够具体,可能会得到你正在搜索的东西)。4szc88ey3#
我写了这个简单的插件,因为我认为我有一个明确的类选择给我错误的地方。选择祖父母似乎比
$().parents()
更直接的特殊情况。嗯,我用过一次,然后意识到我实际上有一个拼写错误。不知道它到底有多大帮助。
$('myelem').gparent(2);
让你成为'myelem'的祖父母。pb3s4cty4#
使用
parents()
选择器获取元素的所有父元素。然后,您可以搜索集合,或者如果您想影响所有祖先,则可以迭代它。k3fezbri5#
@Femi对此有一个答案,并提到了递归,但他的解决方案不是递归的,下面是一个递归的jQuery解决方案,用于获取一个项目的祖先:
如果这是你的HTML:
你可以打电话
获取元素
child
. Here's the JSFiddle的祖父nr9pn0ug6#
使用
parents()
和children()
得到相同的结果。示例而不是使用此:
你可以使用这个:
xoefb8l87#
基本示例
结果;