EDIT: Это, вероятно, лучший подход, чем мой оригинальный ответ:
Пример: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')
.
EDIT: обновление только проверить длину, если текущий элемент делает не имеют firstChild
или, если это делает, что FirstChild не является типом узла 1.
не имел в виду как критику, но я очарован, почему вы хотите? –
Для всех тех, кто находит это через поисковые системы, я обновил суть из jonathan с улучшенной версией от patrick dw. Также немного расширились инструкции. Вы можете найти его здесь: [jQuery deepest plugin gist] (https://gist.github.com/1014671 "jQuery deepest plugin gist") – 2011-06-08 15:54:54