वेब घटकों के मामले में, एक मूलभूत समस्या है जो HTML और जावास्क्रिप्ट के उपयोग से निर्मित विगेट्स को उपयोग में कठिन बनाता है।
समस्या : एक विजेट के अंदर DOM पेड़ बाकी पेज से अलग नहीं है। इनकैप्सुलेशन की कमी का मतलब है कि आपका दस्तावेज़ स्टाइलशीट गलती से विजेट के अंदर के हिस्सों पर लागू हो सकता है; आपका जावास्क्रिप्ट गलती से विजेट के अंदर भागों को संशोधित कर सकता है; विजेट के अंदर आईडी के साथ आपकी आईडी ओवरलैप हो सकती है।
शैडो DOM DOM ट्री एनकैप्सुलेशन समस्या को संबोधित करता है ।
उदाहरण के लिए, यदि आपके पास इस तरह का मार्कअप था:
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
इसके बजाय
Hello, world!
आपका पृष्ठ जैसा दिखता है
こんにちは、影の世界!
इतना ही नहीं, अगर पृष्ठ पर मौजूद जावास्क्रिप्ट पूछती है कि बटन का टेक्स्ट कॉन्टेंट क्या है, तो यह नहीं मिलेगा “こんにちは、影の世界!”
, लेकिन “Hello, world!”
क्योंकि छाया रूट के तहत DOM सबट्री का एनकैप्सुलेट किया गया है ।
ध्यान दें : मैंने https://www.html5rocks.com/en/tutorials/webcompenders/shadowdom/ से ऊपर की सामग्री को उठाया है क्योंकि इसने मुझे पहले से ही यहां के उत्तर की तुलना में छाया डोम को थोड़ा बेहतर समझने में मदद की। मैंने यहां प्रासंगिक सामग्री जोड़ी है ताकि यह दूसरों की मदद करे, लेकिन उसी पर विस्तृत चर्चा के लिए लिंक पर एक नज़र डालें।