有没有一种cheep方法来选择元素中最深的孩子?
例:
<div id="SearchHere"> <div> <div> <div></div> </div> </div> <div></div> <div> <div> <div> <div id="selectThis"></div> </div> </div> </div> <div> <div></div> </div> </div>
解决方法
编辑:这可能比我原来的答案更好一些:
示例:http://jsfiddle.net/patrick_dw/xN6d5/5/
var $target = $('#SearchHere').children(),$next = $target; while( $next.length ) { $target = $next; $next = $next.children(); } alert( $target.attr('id') );
或者这甚至更短一些:
示例:http://jsfiddle.net/patrick_dw/xN6d5/6/
var $target = $('#SearchHere').children(); while( $target.length ) { $target = $target.children(); } alert( $target.end().attr('id') ); // You need .end() to get to the last matched set
原始答案:
这似乎有效:
示例:http://jsfiddle.net/xN6d5/4/
var levels = 0; var deepest; $('#SearchHere').find('*').each(function() { if( !this.firstChild || this.firstChild.nodeType !== 1 ) { var levelsFromThis = $(this).parentsUntil('#SearchHere').length; if(levelsFromThis > levels) { levels = levelsFromThis; deepest = this; } } }); alert( deepest.id );
如果你知道最深的是一个标签(或别的东西),你可以通过用.find(‘div’)替换.find(‘*’)来加快速度。
编辑:如果当前元素没有firstChild或者如果它没有,则firstChild不是1类节点,因此更新为仅检查长度。