将 jQuery 与阴影 dom 结合使用
Using jQuery with shadow dom
这里我创建了带阴影的元素dom。
/* some preparing code */
this.createShadowRoot(); // creates shadow root, this refers to element
稍后在代码中我将访问我创建的阴影 dom。这些工作:
this.shadowRoot.getElementById("...")
this.shadowRoot.querySelector("...")
然而这不是:
$("...", this.shadowRoot)
这是为什么?作为临时解决方案,t他目前有效:
$("...", this.shadowRoot.children)
是否有一种 better/more 优雅的方式来使用 jQuery 处理影子根?
请注意,我使用的 jQuery 版本是 2.1.1,我只处理 Chrome。
编辑:显然 this.shadowRoot.children
在顶层查找节点时不起作用。
这可能是 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);
<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<div id="dTest"></div>
这里我创建了带阴影的元素dom。
/* some preparing code */
this.createShadowRoot(); // creates shadow root, this refers to element
稍后在代码中我将访问我创建的阴影 dom。这些工作:
this.shadowRoot.getElementById("...")
this.shadowRoot.querySelector("...")
然而这不是:
$("...", this.shadowRoot)
这是为什么?作为临时解决方案,t他目前有效:
$("...", this.shadowRoot.children)
是否有一种 better/more 优雅的方式来使用 jQuery 处理影子根?
请注意,我使用的 jQuery 版本是 2.1.1,我只处理 Chrome。
编辑:显然 this.shadowRoot.children
在顶层查找节点时不起作用。
这可能是 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);
<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<div id="dTest"></div>