ในกรณีของส่วนประกอบของเว็บมีปัญหาพื้นฐานที่ทำให้วิดเจ็ตที่สร้างจาก HTML และ JavaScript ใช้งานยาก
ปัญหา : โครงสร้าง DOM ภายในวิดเจ็ตไม่ได้ถูกห่อหุ้มจากส่วนที่เหลือของหน้า การขาดการห่อหุ้มนี้หมายความว่าสไตล์ชีตเอกสารของคุณอาจนำไปใช้กับส่วนต่างๆภายในวิดเจ็ต JavaScript ของคุณอาจแก้ไขส่วนต่างๆภายในวิดเจ็ตโดยไม่ได้ตั้งใจ ID ของคุณอาจทับซ้อนกับ ID ภายในวิดเจ็ตและอื่น ๆ
เงา DOM อยู่ปัญหา
ตัวอย่างเช่นหากคุณมีมาร์กอัปเช่นนี้:
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
จากนั้นแทนที่จะเป็น
Hello, world!
หน้าของคุณดูเหมือน
こんにちは、影の世界!
ไม่เพียงแค่นั้นถ้า JavaScript บนหน้าถามว่าปุ่ม textContent คือมันจะไม่ได้รับ“こんにちは、影の世界!”
แต่“Hello, world!”
เพราะทรีย่อย DOM ภายใต้รากเงาจะห่อหุ้ม
หมายเหตุ : ฉันได้เลือกเนื้อหาข้างต้นจากhttps://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/เนื่องจากช่วยให้ฉันเข้าใจ Shadow DOM ได้ดีกว่าคำตอบที่มีอยู่แล้วเล็กน้อย ฉันได้เพิ่มเนื้อหาที่เกี่ยวข้องที่นี่เพื่อที่จะช่วยเหลือผู้อื่น แต่ลองดูที่ลิงค์เพื่อดูการสนทนาโดยละเอียดในเรื่องเดียวกัน