Différence entre les DOM parentNode et parentElement
Quelqu'un peut-il en m'expliquer de manière aussi simple que possible, quelle est la différence entre le classique DOM parentNode et nouvellement introduit dans Firefox 9 parentElement
- stackoverflow.com/questions/2899196/what-is-this-parentelement
- bugzilla.mozilla.org/show_bug.cgi?id=685798
- parentNode semble être DOM standard, de sorte qu'il est plus sûr de toujours l'utiliser à la place de parentElement.
- w3school n'est pas une autorité: w3fools.com
Vous devez vous connecter pour publier un commentaire.
parentElement
est nouveau pour Firefox 9 et DOM4, mais il a été présent dans tous les autres grands navigateurs pour les âges.Dans la plupart des cas, il est le même que
parentNode
. La seule différence vient quand un nœudparentNode
n'est pas un élément. Si oui,parentElement
estnull
.Comme un exemple:
Depuis le
<html>
élément (document.documentElement
) n'a pas un parent qui est un élément,parentElement
estnull
. (Il y en a d'autres, plus rare, des cas oùparentElement
pourrait êtrenull
, mais vous aurez probablement jamais venir à travers eux.)parentElement
a été un propriétaire IE chose; je crois que d'autres navigateurs à la fois (par exemple, Netscape) pris en chargeparentNode
mais pasparentElement
. (Évidemment, étant donné que je l'ai mentionné Netscape, je parle de la voie du retour à IE5 et plus tôt...)documentfragment.firstChild.parentElement === null
circle
à l'intérieur d'ung
), dans IE,parentElement
sera pas défini, etparentNode
seront ce que vous cherchez. 🙁Dans Internet Explorer,
parentElement
est pas définie pour les éléments SVG, alors queparentNode
est défini.parentElement
pas être mis en œuvre pourNode
est bien connu (developer.mozilla.org/en-US/docs/Web/API/Node/...) mais pourSVGElement
? Je pourrais aussi ne pas reproduire ce avecdocument.createElement('svg').parentElement
dans IE 11.737.17763.0. Était-ce peut-être résolu dans le temps?Utilisation
.parentElement
et vous ne pouvez pas vous tromper tant que vous n'êtes pas à l'aide de fragments de documents.Si vous utilisez les fragments de document, puis vous avez besoin
.parentNode
:Aussi:
JS:
HTML:
Apparemment le
<html>
's.parentNode
des liens vers les Document. Cela devrait être considéré comme une décision phail que les documents ne sont pas des nœuds depuis nœuds sont définis être containable par les documents et les documents ne peuvent pas être contenues par des documents.Edit: Certains de tout cela est faux. Voir les commentaires ci-dessous pour plus de détails
Tous
Element
objets sont égalementNode
objets (parce queElement
est un descendant deNode
). Mais il y a unNode
qui n'est pas unElement
... ladocument
objet. Si votre<html>
élément a un nœud parent (document
), mais il n'a pas un parent de l'élément.La raison qu'il ya un besoin pour
parentElement
au lieu deparentNode
est parce que, HTML5 n'est pas strictement besoin d'un<html>
élément, de sorte que presque n'importe quel élément peut avoir un nœud parent sans avoir réellement un élément parent. Donc, si ma page HTML ressemblait à ceci:Puis le
title
,header
,#body
etfooter
éléments ont leurparentNode
commedocument
, mais leurparentElement
serait nulle. Seul lep
balise serait avez unparentElement
, qui est#body
. (Notez que je ne le conseille pas cela comme une structure de page... en tenir à quelque chose de plus traditionnel.)Vous pouvez le reproduire avec quelque chose comme ceci:
<html>
élément" ce n'est Pas vrai, vous avez mal interprété la spécification HTML5. Lehtml
balise est optionnel, l'élément n'est pas, elle est toujours là si la balise est implicitement ou explicitement prévu. Détails dans l'Article 8 de la spec.<html>
et<body>
éléments dans cette affaire. Vous peut créer des situations où certains aléatoire balise qui n'est pas<html>
est un enfant du document, mais vous devez le faire avec un script (dans les documents HTML; " random XML ce n'est pas vrai), et il prend un peu de travail.Tout comme avec nextSibling et nextElementSibling, rappelez-vous que, propriétés avec "élément" dans leur nom renvoie toujours
Element
ounull
. Propriétés de sans pouvez retourner n'importe quel autre type de nœud.il y a une différence, mais uniquement dans internet explorer. Il se produit lorsque vous mélanger HTML et SVG. si le parent est "l'autre" de ces deux, puis .parentNode donne à la mère, tandis que .parentElement donne pas défini.
undefined
pasnull
.