Bei Webkomponenten gibt es ein grundlegendes Problem, das die Verwendung von Widgets aus HTML und JavaScript schwierig macht.
Problem : Der DOM-Baum in einem Widget ist nicht vom Rest der Seite gekapselt. Dieser Mangel an Kapselung bedeutet, dass Ihr Dokument-Stylesheet möglicherweise versehentlich auf Teile im Widget angewendet wird. Ihr JavaScript kann versehentlich Teile im Widget ändern. Ihre IDs überschneiden sich möglicherweise mit IDs im Widget usw.
Shadow DOM behebt das Problem der DOM-Baumkapselung .
Wenn Sie beispielsweise ein solches Markup hatten:
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
dann statt
Hello, world!
Ihre Seite sieht aus wie
こんにちは、影の世界!
Nicht nur das, wenn JavaScript auf der Seite nach dem Textinhalt der Schaltfläche fragt, wird es nicht abgerufen “こんにちは、影の世界!”
, sondern auch, “Hello, world!”
weil der DOM-Teilbaum unter der Schattenwurzel gekapselt ist .
HINWEIS : Ich habe den oben genannten Inhalt von https://www.html5rocks.com/de/tutorials/webcomponents/shadowdom/ aufgegriffen, da er mir geholfen hat, Shadow DOM ein wenig besser zu verstehen als die Antworten, die hier bereits vorliegen. Ich habe hier relevante Inhalte hinzugefügt, damit sie anderen helfen, aber schauen Sie sich den Link an, um eine ausführliche Diskussion darüber zu erhalten.