使用类列表从JavaScript在web组件中动态添加类
如何向阴影DOM添加动态样式 index.html使用类列表从JavaScript在web组件中动态添加类,javascript,web-component,shadow-dom,custom-element,Javascript,Web Component,Shadow Dom,Custom Element,如何向阴影DOM添加动态样式 index.html <!DOCTYPE html> <html> <head> <title>Document</title> <link rel="import" href="nav-component.html"> </head> <body> <app-nav></app-nav> </body> <
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
<link rel="import" href="nav-component.html">
</head>
<body>
<app-nav></app-nav>
</body>
</html>
必须将btn类添加到button元素,以便将其样式添加到button元素
出错
未捕获的TypeError:无法读取null的属性“classList”
首先,document.registerElement已被弃用,所以我在这里回答了基于类的自定义元素解决方案
解决方案是从document.currentScript.ownerDocument获取文档
更新:
要收听按钮元素,请仅使用connectedCallback thanks@bhv
connectedCallback() {
let btn = this.shadowRoot.querySelector('button')
// Event Listener
btn.addEventListener('click', e => this.changeStyle());
}
首先,document.registerElement已被弃用,所以我在这里回答了基于类的自定义元素解决方案
解决方案是从document.currentScript.ownerDocument获取文档
更新:
要收听按钮元素,请仅使用connectedCallback thanks@bhv
connectedCallback() {
let btn = this.shadowRoot.querySelector('button')
// Event Listener
btn.addEventListener('click', e => this.changeStyle());
}
您也可以简单地从event.target属性获取元素:
function changeStyle() {
console.log('it works');
event.target.classList.add('btn');
}
...
<button onclick="changeStyle()">ENTER</button>
您也可以简单地从event.target属性获取元素:
function changeStyle() {
console.log('it works');
event.target.classList.add('btn');
}
...
<button onclick="changeStyle()">ENTER</button>
谢谢@Raja-你能通过在html中添加事件来测试同一个应用程序吗ENTER@bhv在React或其他框架中是有办法的。但我不知道自定义元素。抱歉…这里的问题是,我们没有选择按钮元素。。this.addEventListener-选择整个模板..您能提到如何从app nav向按钮元素添加事件吗?模板可能有多个元素,如何从中选择按钮元素-抱歉问您更多问题:connectedCallback必须用于从shadowroot connectedCallback选择元素{let btn=this.shadowRoot.querySelector'button'//事件侦听器btn.addEventListener'click',e=>this.changeStyle;}谢谢@Raja-你能通过在html中添加事件来测试同一个应用程序吗ENTER@bhv在React或其他框架中是有办法的。但我不知道自定义元素。抱歉…这里的问题是,我们没有选择按钮元素..this.addEventListener-选择整个模板..您能提到如何从app nav a templat向按钮元素添加事件吗e可能有多个元素,如何从中选择button元素-很抱歉问您更多问题:connectedCallback必须用于从shadowroot connectedCallback中选择元素{let btn=this.shadowroot.querySelector'button'//事件侦听器btn.addEventListener'click',e=>this.changeStyle;}您不能不使用Jquery?$'buttonId'。addClass'btnClass'FYI,document.registerElement不推荐使用:您不能不使用Jquery?$'buttonId'。addClass'btnClass'FYI,document.registerElement不推荐使用:
function changeStyle() {
console.log('it works');
event.target.classList.add('btn');
}
...
<button onclick="changeStyle()">ENTER</button>