РЕДАКТИРОВАТЬ: Это, вероятно, лучший подход, чем мой первоначальный ответ:
Пример: 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('*')
на .find('div')
.
РЕДАКТИРОВАТЬ: Обновлен для проверки длины, только если текущий элемент не имеет firstChild
или если он имеет, что firstChild не является узлом типа 1.