如何在扩展 HTMLElement 的 class 中应用带有 setAttribute 的 class 样式?
How do you apply a class's style with setAttribute inside a class that extends HTMLElement?
我有一个 class,我添加了一个名称为 class 的元素,它应该使我在 CSS 的样式中定义的文本变白,但确实如此不是。文本保持黑色。除了手动设置元素的 CSS 之外,我应该如何实现这一点?
class TestClass extends HTMLElement {
constructor() {
super();
var shadow = this.attachShadow({
mode: 'open'
});
var title = document.createElement('h5');
title.setAttribute('class', 'whiteText');
title.innerText = "Test text"
shadow.appendChild(title);
}
}
customElements.define('test-el', TestClass);
var container = document.getElementById("container")
container.innerHTML = ""
container.appendChild(new TestClass());
body {
background-color: black;
margin: 0;
}
.whiteText {
font-family: Helvetica, sans-serif;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div id='container'>
</div>
修复您的 CSS.
body {
background-color:black;
margin: 0;
}
.whiteText {
font-family: Helvetica, sans-serif;
color:white;
}
添加添加 class,这是更简单的方法
title.classList.add("whiteText");
// or
title.classList.toggle("whiteText");
您已将 h5
元素添加到阴影 dom,因此未应用样式。
要应用样式,需要在阴影 dom 中定义独立的 <style>
标签,如下所示。
class TestClass extends HTMLElement {
constructor() {
super();
var shadow = this.attachShadow({
mode: 'open'
});
var title = document.createElement('h5');
title.setAttribute('class', 'whiteText');
title.innerText = "Test text"
shadow.appendChild(title);
var style = document.createElement('style');
style.innerHTML = '.whiteText { font-family: Helvetica, sans-serif; color: white; }';
shadow.appendChild(style);
}
}
customElements.define('test-el', TestClass);
var container = document.getElementById("container")
container.innerHTML = ""
container.appendChild(new TestClass());
body {
background-color: black;
margin: 0;
}
<div id='container'>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
我有一个 class,我添加了一个名称为 class 的元素,它应该使我在 CSS 的样式中定义的文本变白,但确实如此不是。文本保持黑色。除了手动设置元素的 CSS 之外,我应该如何实现这一点?
class TestClass extends HTMLElement {
constructor() {
super();
var shadow = this.attachShadow({
mode: 'open'
});
var title = document.createElement('h5');
title.setAttribute('class', 'whiteText');
title.innerText = "Test text"
shadow.appendChild(title);
}
}
customElements.define('test-el', TestClass);
var container = document.getElementById("container")
container.innerHTML = ""
container.appendChild(new TestClass());
body {
background-color: black;
margin: 0;
}
.whiteText {
font-family: Helvetica, sans-serif;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div id='container'>
</div>
修复您的 CSS.
body {
background-color:black;
margin: 0;
}
.whiteText {
font-family: Helvetica, sans-serif;
color:white;
}
添加添加 class,这是更简单的方法
title.classList.add("whiteText");
// or
title.classList.toggle("whiteText");
您已将 h5
元素添加到阴影 dom,因此未应用样式。
要应用样式,需要在阴影 dom 中定义独立的 <style>
标签,如下所示。
class TestClass extends HTMLElement {
constructor() {
super();
var shadow = this.attachShadow({
mode: 'open'
});
var title = document.createElement('h5');
title.setAttribute('class', 'whiteText');
title.innerText = "Test text"
shadow.appendChild(title);
var style = document.createElement('style');
style.innerHTML = '.whiteText { font-family: Helvetica, sans-serif; color: white; }';
shadow.appendChild(style);
}
}
customElements.define('test-el', TestClass);
var container = document.getElementById("container")
container.innerHTML = ""
container.appendChild(new TestClass());
body {
background-color: black;
margin: 0;
}
<div id='container'>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>