A method of combining multiple DOM trees into one hierarchy and how these trees interact with each other within a document, thus enabling better composition of the DOM. Shadow DOM is part of Web Components' set of standards.
EXTENSIONS TO ELEMENT INTERFACE
- Attributes
shadowRoot- Represents the youngest shadow root that context object hosts. - Methods
createShadowRoot- Create and returns a new instance of the ShadowRoot objectgetDestinationInsertionPoints- Return a static NodeList consisting of insertion points in the destination insertion points of the context object
CREATE SHADOW DOM
To create a new instance of the ShadowRoot object use
createShadowRoot method, as part of Element interface.<div id="example_1"></div> <script> var root = document.querySelector('#example_1').createShadowRoot(); root.innerHTML = '<div><input type="text"> <button>Alert</button></div>'; </script>
- How to use selectors:
document.querySelector('#example_1').querySelector("button"); // null document.querySelector('#example_1').shadowRoot.querySelector("button");

THE CONTENT ELEMENT
The
content element represents an insertion point in the shadow tree.- Attributes
select - Methods
getDistributedNodes
<div id="example_2"> <h4>Heading 4</h4> <h5>Heading 5</h5> </div> <script> var root_2 = document.querySelector('#example_2').createShadowRoot(); var content = document.createElement('content'); content.setAttribute('select', 'h4'); root_2.appendChild(content); content = document.createElement('content'); content.setAttribute('select', 'h5'); root_2.appendChild(content); </script>
- How to use selectors:
document.querySelector('#example_2').querySelector("h4"); document.querySelector('#example_2').querySelector("h5"); document.querySelector('#example_2').shadowRoot.querySelector("::content"); document.querySelector('#example_2').shadowRoot.querySelectorAll("::content"); document.querySelector('#example_2').shadowRoot.querySelector('::content').getDistributedNodes(); document.querySelector('#example_2').shadowRoot.querySelectorAll('::content')[0].getDistributedNodes(); document.querySelector('#example_2 h4').getDestinationInsertionPoints();

THE SHADOW ELEMENT
The
shadow element represents an shadow insertion point in a shadow tree.- Methods
getDistributedNodes
<ul id="example_3"> <li class="odd">Link 1</li> <li>Link 2</li> <li class="odd">Link 3</li> <li class="other">Link 4</li> <li class="odd">Link 5</li> <li>Link 6</li> </ul> <script> var host = document.querySelector('#example_3'); var root_3a = host.createShadowRoot(); var div = document.createElement('div'); div.className = 'odd'; div.innerHTML = '<ul><content select=".odd"></content></ul>'; root_3a.appendChild(div); div = document.createElement('div'); div.innerHTML = '<ul><content select=""></content></ul>'; root_3a.appendChild(div); var root_3b = host.createShadowRoot(); div = document.createElement('div'); div.innerHTML = '<ul><content select=".other"></content></ul>'; root_3b.appendChild(div); root_3b.appendChild(document.createElement('shadow')); </script>
- How to use selectors:
document.querySelector('#example_3').querySelector("li"); document.querySelector('#example_3').querySelector("li.odd"); document.querySelector('#example_3').shadowRoot.querySelector("::content"); document.querySelector('#example_3').shadowRoot.querySelector("::content").getDistributedNodes(); document.querySelector('#example_3 li').getDestinationInsertionPoints();
BROWSER COMPATIBILITY
Chrome 25+, Firefox 29+, Opera 15+. For polyfilling try Google's Polymer and WebComponents.

No comments:
Post a Comment