jquery - 如何将 JavaScript 变量添加到 Shadow DOM?

标签 jquery shadow-dom

我有一个像这样创建的影子 dom 元素...

this.wrapper = document.createElement("div");
this.shadow = this.wrapper.attachShadow({mode: 'open'});
this.$el.appendChild(this.wrapper);

现在我正在考虑在影子 dom 中分配一个 JS 变量,类似于在窗口上。如果我使用窗口,我会做类似的事情。

window.foo = "bar";

我怎样才能做同样的事情,只将范围封装到shadow dom?

示例:

旧方法:

var wrapper = document.createElement( 'div' )
window.foo = function(){
  console.log("Do Something");
}
wrapper.innerHTML = '<div onclick="foo()"></div>'
document.body.appendChild( this.wrapper )

暗影穹顶

var wrapper = document.createElement( 'div' )
var shadow = this.wrapper.attachShadow( {mode: 'open'} )
shadow.innerHTML = '<div onclick="this.shadow.foo()"></div>'
document.body.appendChild( this.wrapper )
shadow.foo = function(){
  console.log("Do Something");
}

最佳答案

要从 Shadow DOM 内部访问 shadowRoot 实体,您应该调用 getRootNode()方法。

<div onclick="this.getRootNode().foo()">Click</div>

然后您可以调用作为 shadowroot 属性附加的函数。

查看完整示例:

var wrapper = document.createElement( 'div' )
var shadow = wrapper.attachShadow( {mode: 'open'} )
shadow.innerHTML = '<div onclick="this.getRootNode().foo()">Click</div>'
document.body.appendChild( wrapper )
shadow.foo = function() {
  console.log("Do Something")
}

关于jquery - 如何将 JavaScript 变量添加到 Shadow DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092850/

相关文章:

javascript - Shadow DOM,使用目的

specifications - Web 组件 - 为什么 <content> 被替换为 <slot>

javascript - 在 shadow DOM 中执行 JS

javascript - 如何在jsp中访问javascript值?

javascript - 如何在 jquery 上打开对话框文件输入时触发取消

javascript - 我怎样才能使这个导航栏具有响应性,使其可以通过按钮访问?

jquery - 当我将鼠标悬停在我的元素上时,如何更改 Google Polymer 中的 Z-depth 属性?

无法访问 Javascript 变量

javascript - php返回的隐藏字段设置正确,但使用jquery获取值时为 'undefined'

selenium - 使用聚合物 2 刺穿阴影 dom 进行测试自动化(/deep/已弃用)