В JQuery
$('html head').length // 1
И
$('html').find('head').length // 1
И
$('html').find('head').filter('html head').length // 1
НО
$('html').find('html head').length // 0
Почему?
В JQuery
$('html head').length // 1
И
$('html').find('head').length // 1
И
$('html').find('head').filter('html head').length // 1
НО
$('html').find('html head').length // 0
Почему?
Ваш первый селектор $('html head')
работает так же, как находка - получает любые <head>
потомки HTML
HTML──┐ start here and find head HEAD
Ваш второй селектор $('html').find('head')
получает HTML элемент - затем находит всех потомков <head>
элементов
HTML──┐ start here and find head HEAD
Ваш третий селектор $('html').find('head').filter('html head')
получает HTML элемент - затем находит все дочерние <head>
элементы - фильтр действительно бессмысленно, потому что возвращаемые head
элементы гарантированно потомки html
из-за этого $('html').find('head')
HTML──┐ start here and find head HEAD
Ваш LaStone который не работает $('html').find('html head')
ищет структуру ниже
HTML──┐ start here and find "html head" HTML──┐ HEAD but really your structure is like this HTML──┐ HEAD
, который HTML не потомок элемента HTML, так что результаты в 0 элементы возвращаются
Если вы хотите сохранить HTML-элемент в коллекции вы можете использовать .addBack()
$('html') // get html element
.find('html head') // find head element
.addBack() // add back the html element
// if jQuery 1.7 and lower use .andSelf()
.length // this will result in 1 element - the HTML element
Поскольку нет <html>
тега вложенным <html>
тега
Но:
$('html').find('html, head').length // return 1 here coz comma means 'or'
Я не ищу тэг 'html', я ищу тэг' head', который является потомком тега 'html' (то есть' html head') внутри тега 'html'. По сути, я хочу то же самое, что и первые три выражения. – Barney
Так просто: $ ('html'). Find ('head') Почему бы не использовать его? –
Почему селектора в $ .fn.find() не могут ссылаться на дерево за пределами текущего $ scope? – Barney
За документации:
поиск: Получить потомок каждого элемента в текущем наборе соответствующих элементов , фильтруется селектором, объектом jQuery или элементом.
HTML
не является потомком HTML
Но 'html head' (это то, что разрешает селектор). – Barney
Просто оставив этот здесь: ' $ ('html'). andSelf(). find ('html head'). length' – epascarello
@epascarello спасибо! Я бы принял это как ответ, TBH - это было с помощью '$ ('body'). AndSelf(). Find ('html p'). Length === 0', что я понял, что jQuery по существу игнорирует все выше текущий объем для целей поиска. – Barney
Я действительно не понимаю смысла этого. Почему бы просто не использовать: $ (document) .find ('html head'). Length then? –