Вы можете попробовать это:
$('#knownID')
.children('div.knownClass')
.children('span')
.children('nobr')
.children('span.knownClass2')
.children('span:first')
.next()
.html();
Использование таких явных функций быстрее, чем объединение их всех в одну строку, как вы уже сделали. Это потому, что механизм выбора jQuery работает справа налево. Использование таких функций сначала приведет к обнаружению элемента ID, а затем к тому месту, где вы хотите быть.
Почему функции быстрее
JQuery использует Sizzle Selector Engine . Этот механизм удивителен, но следует отметить, что он работает справа налево в запросе селектора. Что это значит? Взять, к примеру, этот фрагмент jQuery:
$('#foo a.bar');
Sizzle сначала найдет каждый якорь на странице, имеющий класс bar
, а затем проверит каждый из них, чтобы узнать, является ли он предком элемента с идентификатором foo
. Это не оптимизировано, особенно если на странице много якорных тегов. Sizzle должен сделать это таким образом, потому что он не знает явно, что вы собираетесь найти.
Это, однако:
$('#foo').children('a.bar');
Сначала найдет элемент с идентификатором foo
, а затем перейдет на один уровень вниз к якорям с классом bar
. Это намного быстрее. Вы можете сказать jQuery сделать это, потому что у вас есть предвидение вашей структуры DOM.