Dalam kasus komponen web, ada masalah mendasar yang membuat widget yang dibuat dari HTML dan JavaScript sulit digunakan.
Masalah : Pohon DOM di dalam widget tidak dikemas dari bagian halaman lainnya. Kurangnya enkapsulasi ini berarti lembar gaya dokumen Anda mungkin tidak sengaja diterapkan ke bagian-bagian di dalam widget; JavaScript Anda mungkin secara tidak sengaja mengubah bagian di dalam widget; ID Anda mungkin tumpang tindih dengan ID di dalam widget dan seterusnya.
Shadow DOM mengatasi masalah enkapsulasi pohon DOM .
Misalnya, jika Anda memiliki markup seperti ini:
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
lalu alih-alih
Hello, world!
halaman Anda terlihat seperti
こんにちは、影の世界!
Tidak hanya itu, jika JavaScript pada halaman menanyakan apa textContent tombol itu, itu tidak akan didapat “こんにちは、影の世界!”
, tetapi “Hello, world!”
karena subtree DOM di bawah shadow root dienkapsulasi .
CATATAN : Saya telah mengambil konten di atas dari https://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/ karena membantu saya memahami shadow DOM sedikit lebih baik daripada jawaban yang sudah ada di sini. Saya telah menambahkan konten yang relevan di sini sehingga membantu orang lain tetapi lihat tautan untuk diskusi terperinci tentang hal yang sama.