Birisi beni mümkün olduğunca basit bir şekilde açıklayabilir mi, klasik DOM parentNode ile Firefox 9 parentElement'da yeni tanıtılan arasındaki fark nedir
Birisi beni mümkün olduğunca basit bir şekilde açıklayabilir mi, klasik DOM parentNode ile Firefox 9 parentElement'da yeni tanıtılan arasındaki fark nedir
Yanıtlar:
parentElement
Firefox 9 ve DOM4 için yenidir, ancak diğer tüm büyük tarayıcılarda uzun zamandır mevcuttur.
Çoğu durumda, aynıdır parentNode
. Tek fark, bir düğümün parentNode
bir eleman olmadığı zaman gelir . Eğer öyleyse, parentElement
öyle null
.
Örnek olarak:
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
İtibaren <html>
elemanın ( document.documentElement
) bir eleman olan bir üst sahip değildir, parentElement
bir null
. (Olası parentElement
olabilecek başka durumlar da var null
, ancak muhtemelen bunlarla hiç karşılaşmayacaksınız.)
parentElement
tescilli bir IE şeydi; O zaman diğer tarayıcıların (örneğin, Netscape) desteklendiğine inanıyorum parentNode
ama desteklemiyorum parentElement
. (Açıkçası, Netscape'ten bahsettiğim gibi, IE5 ve öncesine giden yoldan bahsediyorum ...)
documentfragment.firstChild.parentElement === null
circle
iç a gibi g
) parentElement
tanımsız parentNode
olacak ve aradığınız şey olacak. :(
Internet Explorer'da, parentElement
SVG öğeleri parentNode
için tanımlanmamıştır.
parentElement
uygulanmadığı Node
iyi bilinir ( developer.mozilla.org/en-US/docs/Web/API/Node/… ) ama SVGElement
? Bunu document.createElement('svg').parentElement
IE 11.737.17763.0 ile de çoğaltamadım. Bu arada belki düzeltildi mi?
Kullanın .parentElement
ve belge parçaları kullanmadığınız sürece yanlış gidemezsiniz.
Belge parçalarını kullanıyorsanız, aşağıdakilere ihtiyacınız vardır .parentNode
:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
Ayrıca:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
Görünüşe göre <html>
' Belgeye.parentNode
bağlantılar . Belgeler düğümleri yana düğümlerin değildir bu bir karar phail düşünülmelidir tanımlandığı dokümanlarla yer olamaz belge ve belgelerle containable olması.
NextSibling ve nextElementSibling gibi, adlarında "element" bulunan özelliklerin her zaman Element
veya döndürdüğünü unutmayın null
. Olmayan özellikler başka bir düğüm türünü döndürebilir.
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
bir fark daha var, ama sadece internet explorer'da. HTML ve SVG'yi karıştırdığınızda oluşur. üst öğe bu ikisinin 'diğeri' ise, .parentNode üst öğeyi verirken .parentElement tanımsız verir.
undefined
değil null
.