Alguém pode me explicar da forma mais simples possível, qual é a diferença entre o DOMN clássico do pai e o recém-introduzido no Firefox 9 parentElement
Alguém pode me explicar da forma mais simples possível, qual é a diferença entre o DOMN clássico do pai e o recém-introduzido no Firefox 9 parentElement
Respostas:
parentElement é novo no Firefox 9 e no DOM4, mas está presente em todos os outros principais navegadores há muito tempo.
Na maioria dos casos, é o mesmo que parentNode. A única diferença ocorre quando o nó parentNodenão é um elemento. Se sim, parentElementé null.
Como um exemplo:
document.body.parentNode; // the <html> element
document.body.parentElement; // the <html> element
document.documentElement.parentNode; // the document node
document.documentElement.parentElement; // null
(document.documentElement.parentNode === document); // true
(document.documentElement.parentElement === document); // false
Desde que o <html>elemento ( document.documentElement) não tem um pai que é um elemento, parentElementé null. (Existem outros casos, mais improváveis, onde parentElementpoderia estar null, mas você provavelmente nunca os encontrará.)
parentElementera uma coisa proprietária do IE; Acredito que outros navegadores da época (por exemplo, Netscape) sejam compatíveis, parentNodemas não parentElement. (Obviamente, uma vez que eu mencionei Netscape, eu estou falando de caminho de volta para IE5 e anteriores ...)
documentfragment.firstChild.parentElement === null
circleinterno a g), no IE, parentElementserá indefinido e parentNodeserá o que você está procurando. :(
No Internet Explorer, parentElementé indefinido para elementos SVG, enquanto parentNodeestá definido.
parentElementnão está sendo implementado para Nodeé bem conhecido ( developer.mozilla.org/en-US/docs/Web/API/Node/… ), mas para SVGElement? Também não pude reproduzir isso document.createElement('svg').parentElementno IE 11.737.17763.0. Talvez isso tenha sido corrigido enquanto isso?
Use .parentElemente você não pode dar errado desde que não esteja usando fragmentos de documento.
Se você usar fragmentos de documento, precisará .parentNode:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
Além disso:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
Aparentemente, o <html>'s .parentNodelinks para o documento . Isso deve ser considerado um processo de decisão, pois os documentos não são nós, pois os nós são definidos para serem contidos por documentos e os documentos não podem ser contidos por documentos.
Assim como em nextSibling e nextElementSibling , lembre-se de que as propriedades com "elemento" em seu nome sempre retornam Elementou null. Propriedades sem podem retornar qualquer outro tipo de nó.
console.log(document.body.parentNode, "is body's parent node"); // returns <html>
console.log(document.body.parentElement, "is body's parent element"); // returns <html>
var html = document.body.parentElement;
console.log(html.parentNode, "is html's parent node"); // returns document
console.log(html.parentElement, "is html's parent element"); // returns null
Há mais uma diferença, mas apenas no Internet Explorer. Isso ocorre quando você mistura HTML e SVG. se o pai for o 'outro' desses dois, .parentNode fornecerá o pai, enquanto .parentElement fornecerá indefinido.
undefinednão é null.