मुझे संभव शब्दों के रूप में सरल रूप में से समझाने में कर सकते किसी को, शास्त्रीय डोम के बीच अंतर क्या है parentNode Firefox 9 में शुरू की और नव parentElement
मुझे संभव शब्दों के रूप में सरल रूप में से समझाने में कर सकते किसी को, शास्त्रीय डोम के बीच अंतर क्या है parentNode Firefox 9 में शुरू की और नव parentElement
जवाबों:
parentElement
फ़ायरफ़ॉक्स 9 और DOM4 के लिए नया है, लेकिन यह उम्र के लिए अन्य सभी प्रमुख ब्राउज़रों में मौजूद है।
ज्यादातर मामलों में, यह वैसा ही है parentNode
। केवल एक अंतर तब आता है जब एक नोड parentNode
एक तत्व नहीं है। यदि हां, तो parentElement
है null
।
उदहारण के लिए:
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
चूंकि <html>
तत्व ( document.documentElement
) में एक अभिभावक नहीं है जो एक तत्व है, parentElement
है null
। (अन्य, अधिक संभावना नहीं, ऐसे मामले parentElement
हैं null
, जो हो सकते हैं , लेकिन आप शायद कभी भी उनके सामने नहीं आएंगे।)
parentElement
एक मालिकाना IE चीज़ थी; मेरा मानना है कि उस समय अन्य ब्राउज़र (जैसे, नेटस्केप) समर्थित थे parentNode
लेकिन नहीं parentElement
। (जाहिर है, यह देखते हुए कि मैंने नेटस्केप का उल्लेख किया है, मैं IE5 और पहले के तरीके के बारे में बात कर रहा हूं ...)
documentfragment.firstChild.parentElement === null
circle
अंदर g
), आईई में, parentElement
अपरिभाषित parentNode
होगा , और वही होगा जो आप देख रहे हैं। :(
इंटरनेट एक्सप्लोरर में, parentElement
एसवीजी तत्वों के लिए अपरिभाषित है, जबकि parentNode
परिभाषित किया गया है।
parentElement
के लिए लागू नहीं किया जा रहा Node
है अच्छी तरह से पता है ( developer.mozilla.org/en-US/docs/Web/API/Node/… ) लेकिन के लिए SVGElement
? मैं भी document.createElement('svg').parentElement
IE 11.737.17763.0 में इस के साथ पुन: पेश नहीं कर सका । क्या इस बीच शायद तय किया गया था?
.parentElement
जब तक आप दस्तावेज़ के टुकड़े का उपयोग नहीं कर रहे हैं, तब तक उपयोग करें और आप गलत नहीं हो सकते
यदि आप दस्तावेज़ के टुकड़े का उपयोग करते हैं, तो आपको आवश्यकता है .parentNode
:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
इसके अलावा:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
जाहिरा तौर पर <html>
के .parentNode
लिए लिंक के दस्तावेज । इसे एक फ़ैसला फ़ैला माना जाना चाहिए क्योंकि दस्तावेज़ नोड्स नहीं होते हैं क्योंकि नोड्स को दस्तावेजों द्वारा समाहित करने के लिए परिभाषित किया जाता है और दस्तावेज़ों को दस्तावेज़ों में शामिल नहीं किया जा सकता है।
बस के साथ की तरह nextSibling और nextElementSibling , सिर्फ इतना है कि, हमेशा उनके नाम में "तत्व" के साथ गुण रिटर्न याद Element
या null
। गुण बिना किसी अन्य प्रकार के नोड वापस कर सकते हैं।
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
एक और अंतर है, लेकिन केवल इंटरनेट एक्सप्लोरर में। यह तब होता है जब आप HTML और SVG को मिलाते हैं। यदि माता-पिता उन दोनों के 'अन्य' हैं, तो।
undefined
नहीं है null
।