Dans jQuery
$('html head').length // 1
Et
$('html').find('head').length // 1
Et
$('html').find('head').filter('html head').length // 1
MAIS
$('html').find('html head').length // 0
Pourquoi?
Dans jQuery
$('html head').length // 1
Et
$('html').find('head').length // 1
Et
$('html').find('head').filter('html head').length // 1
MAIS
$('html').find('html head').length // 0
Pourquoi?
Votre premier sélecteur $('html head')
fonctionne comme find - gets des <head>
descendants de HTML
HTML──┐ start here and find head HEAD
Votre second sélecteur $('html').find('head')
obtient élément html - puis trouve tous les descendants <head>
éléments
HTML──┐ start here and find head HEAD
Votre troisième sélecteur $('html').find('head').filter('html head')
obtient élément html - trouve alors tous <head>
descendant éléments - le filtre est vraiment inutile parce que les retournés head
éléments sont garantis descendants de html
à cause de cette $('html').find('head')
HTML──┐ start here and find head HEAD
Votre lastone qui ne fonctionne pas $('html').find('html head')
est à la recherche de la structure ci-dessous
HTML──┐ start here and find "html head" HTML──┐ HEAD but really your structure is like this HTML──┐ HEAD
qui html ne dispose pas d'un élément HTML descendant afin que les résultats en 0 éléments retournés
Si vous voulez garder l'élément HTML dans la collection que vous pouvez utiliser .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
Parce qu'il n'y a pas de balise <html>
imbriqué dans <html>
tag
Mais:
$('html').find('html, head').length // return 1 here coz comma means 'or'
Je ne cherche pas la balise 'html', je cherche une balise' head' qui est un descendant d'une balise 'html' (ie' html head') à l'intérieur de la balise 'html'. Essentiellement, je veux la même chose que ce que les trois premières expressions retournent. – Barney
Donc juste: $ ('html'). Find ('head') Pourquoi ne pas l'utiliser? –
Pourquoi les sélecteurs de $ .fn.find() ne peuvent-ils pas référencer l'arbre au-delà de la $ scope actuelle? – Barney
par la documentation:
Recherche: Obtenez les descendants de chaque élément dans l'ensemble actuel des éléments appariés , filtré par un sélecteur, un objet jQuery ou un élément.
HTML
n'est pas un descendant de HTML
Mais 'html head' (qui est ce que le sélecteur résout) est. – Barney
Tout en laissant celui-ci ici: ' $ ('html'). etSelf(). find ('html head'). longueur' – epascarello
@epascarello merci! J'aurais accepté cela comme une réponse, TBH - c'était en essayant '$ ('body'). EtSelf(). Find ('html p'). Length === 0' que j'ai réalisé que jQuery ignore essentiellement tout ce qui précède la portée actuelle aux fins de «trouver». – Barney
Je ne comprends vraiment pas la signification de ceci. Pourquoi ne pas simplement utiliser: $ (document) .find ('html head'). Length alors? –