Adakah yang bisa menjelaskan saya sesederhana mungkin, apa perbedaan antara DOM parentNode klasik dan yang baru diperkenalkan di Firefox 9 parentElement
Adakah yang bisa menjelaskan saya sesederhana mungkin, apa perbedaan antara DOM parentNode klasik dan yang baru diperkenalkan di Firefox 9 parentElement
Jawaban:
parentElement adalah baru untuk Firefox 9 dan DOM4, tetapi telah ada di semua browser utama lainnya sejak lama.
Dalam kebanyakan kasus, ini sama dengan parentNode. Satu-satunya perbedaan terjadi ketika simpul parentNodebukan elemen. Jika demikian, parentElementadalah null.
Sebagai contoh:
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
Karena <html>elemen ( document.documentElement) tidak memiliki orangtua yang merupakan elemen, parentElementadalah null. (Ada beberapa kasus lain yang lebih tidak parentElementmungkin terjadi null, tetapi Anda mungkin tidak akan pernah menemukannya.)
parentElementadalah hal yang merupakan hak milik IE; Saya percaya browser lain pada saat itu (misalnya, Netscape) mendukung parentNodetetapi tidak parentElement. (Jelas, mengingat saya telah menyebutkan Netscape, saya sedang berbicara tentang jalan kembali ke IE5 dan sebelumnya ...)
documentfragment.firstChild.parentElement === null
circledi dalam a g), di IE, parentElementakan tidak terdefinisi, dan parentNodeakan menjadi apa yang Anda cari. :(
Di Internet Explorer, parentElementtidak ditentukan untuk elemen SVG, sedangkan parentNodedidefinisikan.
parentElementtidak diterapkan untuk Nodediketahui ( developer.mozilla.org/en-US/docs/Web/API/Node/… ) tetapi untuk SVGElement? Saya juga tidak bisa mereproduksi ini dengan document.createElement('svg').parentElementIE 11.737.17763.0. Apakah ini mungkin sudah diperbaiki sementara itu?
Gunakan .parentElementdan Anda tidak bisa salah asalkan Anda tidak menggunakan fragmen dokumen.
Jika Anda menggunakan fragmen dokumen, maka Anda perlu .parentNode:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
Juga:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
Ternyata <html>itu .parentNodetautan ke Dokumen . Ini harus dianggap sebagai keputusan keputusan karena dokumen bukan node karena node didefinisikan dapat disimpan oleh dokumen dan dokumen tidak dapat dimuat oleh dokumen.
Sama seperti dengan nextSibling dan nextElementSibling , ingatlah bahwa, properti dengan "elemen" dalam namanya selalu kembali Elementatau null. Properti tanpa dapat mengembalikan jenis simpul lainnya.
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
ada satu lagi perbedaan, tetapi hanya di internet explorer. Itu terjadi ketika Anda mencampur HTML dan SVG. jika orangtua adalah 'yang lain' dari keduanya, maka .parentNode memberikan induk, sementara .parentElement memberikan yang tidak terdefinisi.
undefinedtidak null.