Apa Itu Shadow DOM? Mengenal Serta Penjelasan Lengkapnya!  Shadow DOM bisa menutup beberapa susunan DOM dalam elemen hingga tidak bisa disen...
xschoolpedia

Apa Itu Shadow DOM? Mengenal Serta Penjelasan Lengkapnya !

Daftar Isi [Tampil]

    Apa Itu Shadow DOM? Mengenal Serta Penjelasan Lengkapnya! 

    Shadow DOM bisa menutup beberapa susunan DOM dalam elemen hingga tidak bisa disentuh di luar elemen atau nodenya. Secara singkat kita dapat sebutkan Shadow DOM sebagai "DOM dalam DOM".
    Apa Itu Shadow DOM?

     Bagaimana dia bekerja? Lihat contoh berikut ini:
    2020031020401056fdb6ae992399a36fcbfa50e75cf4ee.png
    Shadow DOM bisa membuat DOM Tree lain tercipta secara terisolasi lewat host yang disebut elemen dari reguler DOM Tree (Dokumen Tree). Shadow DOM Tree ini diawali dari root bayang-bayang (Shadow root), yang dibawahnya bisa banyak memiliki element kembali seperti Dokumen Tree.
    Ada banyak terminologi yang penting kita kenali dari contoh 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 bisa merekayasa komponen yang ada dalam shadow tree seperti pada dokumen tree, tetapi lingkupnya sepanjang kita ada dalam shadow boundary. Dalam kata lain, bila kita ada di dokumen tree kita tidak bisa merekayasa komponen bahkan juga mengaplikasikan styling pada komponen yang ada dalam shadow tree. Itu kenapa shadow DOM bisa membuat elemen 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
    Sekian pembahasan mengenai Apa Itu Shadow DOM. Semoga bermafaat.
    KIRIM HADIAH PAYPAL Anda dapat memberikan kami hadiah dengan Paypal yang akan kami gunakan untuk memperpanjang domain blog ini, agar terus dapat aktif berbagi ilmu.

    Related Posts

    Iklan Atas Artikel

    Iklan Bawah Artikel

    Donasi
    Hallo sobat xschoolpedia, Anda dapat memberikan suport kepada kami dengan cara memberikan donasi, yang mana nantinya donasi tersebut akan digunakan untuk memperpanjang Domain xschoolpedia.

    BANK Mandiri:1710002049008 a/n AHMAD REGAL
    PULSA : 081252069296
    PAYPAL : xschoolpedia
    Done