Search code examples
javascriptjquerydompolymershadow-dom

Can I access the shadow DOM using jQuery?


I defined a component with polymer like this:

<polymer-element name="my-component">
  <template>
    <div id='test'>CONTENT</div>
  </template>
</polymer-element>

Now I want to access the shadow dom, for example: to get the content of div id='test'

var x = $("div#test").html();

The given code doesn't work. Can I access the shadow dom with jquery?


Solution

  • No, not outside of the Polymer element.

    After reading up on Polymer, it looks like you can only have access to the shadow-DOM of Polymer elements in scripts within the Polymer element. The Polymer docs on Automatic node finding say:

    Every node in a component’s shadow DOM that is tagged with an id attribute is automatically referenced in the component’s this.$ hash.

    This means you can add a <script> tag as a sibling to <template> where this.$.test will be the element you want.

    <polymer-element name="my-component">
      <template>
        <div id='test'>CONTENT</div>
      </template>
      <script>
        Polymer('my-component', {
            logNameValue: function () {
                console.log('polymer element', this.$.test);
                console.log('jQuery wrapper of polymer element', $(this.$.test));
            }
        });
      </script>
    </polymer-element>