使用对象中定义的属性更改 CSS

phy*_*boy 5 html javascript css

是否可以使用存储在 JS 对象中的 CSS 属性来动态设置元素样式?

例如,更改一个简单元素的width和:background<div>

<div id="box"></div>
<button id="btn">click me</button>
Run Code Online (Sandbox Code Playgroud)

盒子最初的样式是:

div {
  background: grey;
  width: 100px;
  height: 100px;
}
Run Code Online (Sandbox Code Playgroud)

单击按钮元素时,该框将重新设置样式,如下所示:

btn.addEventListener('click', () => {
  // Code to change box style here...
}
Run Code Online (Sandbox Code Playgroud)

我已经看到了 的使用setAttribute('style', 'some style stuff here');,但是我开始明白,这将简单地替换与该元素关联的所有样式属性,而不是附加/更改 :-( 中定义的属性

我的目标是在 JS 对象中保存 CSS 属性,例如:

const myStyle = {
  'background': 'green',
  'width': '20px'
}
Run Code Online (Sandbox Code Playgroud)

并将其应用到元素上。

我知道这可以通过将属性保存在另一个名为“.box-transform”之类的 CSS 类中,然后将其添加到元素的 classList 中来完成...但我想通过 JS 来完成此操作。

我最初的尝试是这样的:

btn.addEventListener('click', () => {
  for (let [key, val] of Object.entries(myStyle)) {
    console.log(`${key}: ${val}`)
  box.setAttribute('style', `${key}: ${val}`)
}
});
Run Code Online (Sandbox Code Playgroud)

然而,我遇到了一个压倒性的问题setAttribute......

<div id="box"></div>
<button id="btn">click me</button>
Run Code Online (Sandbox Code Playgroud)
div {
  background: grey;
  width: 100px;
  height: 100px;
}
Run Code Online (Sandbox Code Playgroud)
btn.addEventListener('click', () => {
  // Code to change box style here...
}
Run Code Online (Sandbox Code Playgroud)

小智 4

const btn = document.getElementById('btn');
const box = document.getElementById('b');

const myobj = {
  'width': '200px',
  'background': 'yellow'
};

btn.addEventListener('click', () => {
  for (let [key, val] of Object.entries(myobj)) {
    box.style[key] = val;
  }
});
Run Code Online (Sandbox Code Playgroud)
.box {
  width: 300px;
  height: 300px;
  background: grey;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box" id="b"></div>
<button id="btn">click</button>
Run Code Online (Sandbox Code Playgroud)