如何在扩展 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>