Skip to main content

Apa Itu Shadow DOM?

Shadow DOM dapat mengisolasi sebagian struktur DOM di dalam komponen sehingga tidak dapat disentuh dari luar komponen atau nodenya. Singkatnya kita bisa sebut Shadow DOM sebagai “DOM dalam DOM”. Bagaimana ia bekerja? Perhatikan ilustrasi berikut:

Shadow DOM dapat membuat DOM Tree lain terbentuk secara terisolasi melalui host yang merupakan komponen dari regular DOM Tree (Document Tree). Shadow DOM Tree ini dimulai dari root bayangan (Shadow root), yang dibawahnya dapat memiliki banyak element lagi layaknya Document Tree.
Terdapat beberapa terminologi yang perlu kita ketahui dari ilustrasi di atas:
  • Shadow host : Merupakan komponen/node yang terdapat pada regular DOM di mana shadow DOM terlampir pada komponen/node ini.
  • Shadow tree : DOM Tree di dalam shadow DOM.
  • Shadow boundary : Batas dari shadow DOM dengan regular DOM.
  • Shadow root : Root node dari shadow tree.
Kita dapat memanipulasi elemen yang terdapat di dalam shadow tree layaknya pada document tree, namun cakupannya selama kita berada di dalam shadow boundary. Dengan kata lain, jika kita berada di document tree kita tidak dapat memanipulasi elemen bahkan menerapkan styling pada elemen yang terdapat di dalam shadow tree. Itulah mengapa shadow DOM dapat membuat komponen terenkapsulasi
Untuk melampirkan Shadow DOM pada elemen penggunaan sangat mudah, yaitu dengan menggunakan properti attachShadow pada elemen-nya seperti ini:

  1. // Shadow Host

  2. const divElement = document.createElement("div");

  3.  

  4.  

  5. // element yang berada di dalam Shadow DOM

  6. const headingElement = document.createElement("h1");

  7. headingElement.innerText = "Ini merupakan konten di dalam shadow DOM";

  8.  

  9.  

  10. // Melampirkan shadow root pada shadow host

  11. // Mengatur mode shadow dengan nilai open

  12. const shadowRoot = divElement.attachShadow({mode: "open"});

  13.  

  14.  

  15. // Memasukkan element heading ke dalam shadow root

  16. shadowRoot.appendChild(headingElement);

  17.  

  18.  

  19. // Memasukkan elemen shadow host ke regular DOM

  20. document.body.appendChild(divElement);



  1. <!DOCTYPE html>

  2. <html>

  3.  <head>

  4.    <meta charset="utf-8">

  5.    <meta name="viewport" content="width=device-width">

  6.    <title>Shadow DOM Basic Usage</title>

  7.  </head>

  8.  <body>

  9.  <script src="main.js"></script>

  10.  </body>

  11. </html>


Jika kita lihat pada browser, maka struktur HTML yang akan dihasilkan adalah seperti ini:

2020031020442138d22cf8f4814aacc795f563c3015892.png
Dan struktur DOM tree yang terbentuk akan tampak seperti ini:
20200310204452a9e4788ac5f7f206c20debfa0bc87524.png
Dalam penggunaan attachShadow() kita melampirkan objek dengan properti mode yang memiliki nilai ‘open’. Sebenarnya terdapat dua opsi nilai yang dapat digunakan dalam properti mode, yaitu “open” dan “closed”. 
Menggunakan nilai open berarti kita memperbolehkan untuk mengakses properti shadowRoot melalui elemen yang melampirkan Shadow DOM. 

  1. divElement.attachShadow;


properti shadowRoot mengembalikan struktur DOM yang berada pada shadow tree.
20200310204643a7a1f999761eaf74f9476e50013bb373.gif
Namun jika kita menggunakan nilai closed maka properti shadowRoot akan mengembalikan nilai null

  1. const shadowRoot = divElement.attachShadow({mode: "closed"});

  2. divElement.shadowRoot // null;


Hal ini berarti kita sama sekali tidak dapat mengakses Shadow Tree selain melalui variabel yang kita definisikan ketika melampirkan Shadow DOM.

  1. const shadowRoot = divElement.attachShadow({mode: "closed"});

  2. divElement.shadowRoot // null;

  3. shadowRoot // # shadow-root (closed)


2020031020483296ef7fce493fd7c0528697c3fa03565b.gif
Karena Shadow DOM terisolasi dari document tree maka element yang terdapat di dalamnya pun tidak akan terpengaruh oleh styling yang berada diluar dari shadow root-nya.

  1. <!DOCTYPE html>

  2. <html>

  3.  <head>

  4.    <meta charset="utf-8">

  5.    <meta name="viewport" content="width=device-width">

  6.    <title>Shadow DOM Basic Usage</title>

  7.    <style>

  8.        h1 {

  9.          color: red;

  10.        }

  11.    </style>

  12.  </head>

  13.  <body>

  14.    <h1>Ini merupakan konten yang berada di Document tree</h1>

  15.    <script src="main.js"></script>

  16.  </body>

  17. </html>



  1. // Shadow Host

  2. const divElement = document.createElement("div");

  3.  

  4.  

  5. // element yang berada di dalam Shadow DOM

  6. const headingElement = document.createElement("h1");

  7. headingElement.innerText = "Ini merupakan konten di dalam shadow DOM";

  8.  

  9.  

  10. // Melampirkan shadow root pada shadow host

  11. // Mengatur mode shadow dengan nilai open

  12. const shadowRoot = divElement.attachShadow({mode: "open"});

  13.  

  14.  

  15. // Memasukkan element heading ke dalam shadow root

  16. shadowRoot.appendChild(headingElement);

  17.  

  18.  

  19. // Memasukkan elemen shadow host ke regular DOM

  20. document.body.appendChild(divElement);



Jika dilihat pada browser maka hasilnya akan seperti ini:

20200310205023649403bfa8d61e879afc65f4a050c502.png
Berdasarkan hasil di atas, styling hanya akan diterapkan pada elemen <h1> yang berada di document tree. Sedangkan elemen <h1> yang berada pada shadow dom tidak akan terpengaruh dengan styling tersebut. Lantas, bagaimana caranya kita melakukan styling pada Shadow DOM?
Kita dapat melakukannya dengan menambahkan template <style> di dalam shadowRoot.innerHTML.  Contohnya seperti ini:

  1. // menetapkan styling pada Shadow DOM

  2. shadowRoot.innerHTML += `

  3.  <style>

  4.    h1 {

  5.      color: green;

  6.    }

  7.  </style>

  8. `;


Maka element <style> tersebut akan berada di dalam shadow tree dan akan berdampak pada elemen yang ada di dalamnya.
20200310205206823dcc0fb3c6ef38cb5e0a7563f0590d.png

Popular posts from this blog

Blogger: The Ins And Outs

Blogging adalah semua kemarahan saat ini. Ini adalah cara yang menyenangkan dan murah untuk membuat suara Anda terdengar di Internet. Melalui blogging, Anda dapat membuat pemikiran harian Anda (intim atau tidak) diketahui publik – dan dengan audiens yang lebih besar. Ini membuat layanan ini bagus untuk menyimpan buku harian (jika membuat buku harian publik adalah pilihan terbaik Anda), pemasaran (blogging adalah cara yang bagus untuk melakukan pemasaran – lebih dari itu nanti), dan berbagi informasi dan memperbarui. Mengapa Blog? Blogging adalah cara hidup. Ini mungkin salah satu kekuatan teknologi yang paling memungkinkan untuk menghantam Internet dalam beberapa tahun terakhir. Anehnya, itu telah memungkinkan keterlibatan yang lebih besar dari orang-orang dengan teknologi dan informasi. Hal yang hebat tentang blogging adalah mudah dipelajari dan mudah digunakan – terutama dengan layanan blogging seperti Blogger. Blog adalah, dalam pengertian teknis, perangkat lunak manajemen konten ya...

Blog cara Anda untuk mendapatkan keuntungan

Semua orang telah mengambil tren blogging. Dan blogging telah mengambil skema menghasilkan uang. Jika Anda memiliki blog dan belum menggunakannya untuk menghasilkan uang secara online, maka Anda akan ditinggalkan oleh orang lain yang sudah mendapatkan keuntungan yang baik dari blog. Bagaimana mereka melakukannya? Menjual iklan melalui blog. Ini adalah cara paling umum untuk membuat blog menghasilkan pendapatan. Prosesnya sederhana. Jika blog Anda adalah salah satu yang lebih terkenal dan banyak dibaca, Anda dapat menjual ruang iklan sendirian. Tetapi untuk blog yang tidak begitu terkenal, ada layanan yang dapat digunakan untuk membuat program iklan. Yang banyak digunakan adalah Adsense. Adsense memungkinkan Anda memilih beberapa iklan yang agak terkait dengan isi situs Anda. Anda kemudian dibayar berdasarkan jumlah pembaca yang mengklik iklan untuk memeriksanya. Mengapa orang memilih Adsense adalah karena mereka bisa mendapatkannya secara gratis. Blog sebagai program afiliasi. Ini adal...

Blog Jalan Anda ke Bank

Blog Jalan Anda ke Bank Pernahkah Anda mendengar tentang Ledakan Pemasaran Blog? Blog adalah weblog, diperbarui mingguan atau harian. Ini adalah buku harian atau jurnal online. Blog memiliki menjadi lebih populer daripada situs web. Tidak perlu tahu HTML, tidak perlu mengatur file seperti pustakawan, tidak perlu mendesain halaman web! Kalian semua yang harus Anda lakukan adalah menulis apa pun yang muncul di pikiran Anda (saat Anda menulis buku harian atau jurnal ) dan blog di server blog gratis, seperti http://www.blogger.com/ atau http://www.wordpress.com/ ! Lihat! Anda telah membuat blog, yang anak cucu dapat menikmati. Anda telah bergabung dengan jajaran terpilih Dante, Shakespeare dan Goethe! Mesin pencari menyukai konten asli yang segar dan jika Anda dapat memberikan yang baik konten, blog Anda akan populer. Apa pun yang Anda tulis di blog atau situs Anda akan dibaca oleh mesin pencari. Menyediakan konten yang baik adalah tugas Anda. NS mesin pencari akan memastikan lalu lintas y...