将 jQuery 与 Shadow dom 结合使用

Der*_*會功夫 3 html javascript jquery shadow-dom

这里我用 Shadow dom 创建了元素。

/* some preparing code */
this.createShadowRoot();  // creates shadow root, this refers to element
Run Code Online (Sandbox Code Playgroud)

稍后在代码中我将访问我创建的影子 dom。这些工作:

this.shadowRoot.getElementById("...")
this.shadowRoot.querySelector("...")
Run Code Online (Sandbox Code Playgroud)

然而这并没有:

$("...", this.shadowRoot)
Run Code Online (Sandbox Code Playgroud)

这是为什么?作为目前他的工作的临时解决方案:

$("...", this.shadowRoot.children)
Run Code Online (Sandbox Code Playgroud)

有没有更好/更优雅的方法来使用 jQuery 处理影子根?

请注意,我使用的 jQuery 版本是 2.1.1,并且我只处理 Chrome。


编辑:this.shadowRoot.children在顶层查找节点时显然不起作用。

Pas*_*rby 5

这可能是 jQuery 2.1.1 的问题。

在 jsfiddle 中使用 jQuery 2.1.3 似乎可以解决这个问题:

https://jsfiddle.net/bnh74s87/

document.addEventListener("DOMContentLoaded",function(){
  var div=document.getElementById("dTest");
  var shadow=div.createShadowRoot();
  shadow.innerHTML='<p>Hi!</p>';
  document.body.appendChild(document.createTextNode(shadow.childNodes.length));
  console.log(shadow.querySelectorAll("p"));
  console.log($("p",shadow));
  $("p",shadow).html("Hello!");
},false);
Run Code Online (Sandbox Code Playgroud)
<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<div id="dTest"></div>
Run Code Online (Sandbox Code Playgroud)