开发者问题收集

如何通过 javascript 更改类的所有元素的字体颜色?[重复]

2020-01-17
5103

我有一个按钮可以更改我的 Web 应用程序的背景图像,我想在单击该按钮时更改字体的颜色。

我尝试将元素设为自己的变量,但这也不起作用。

cafeButton.addEventListener('click', function(){
    bg.style.backgroundImage = "url('img/cafe.jpeg')"; //change text colors
    document.getElementsByClassName('topbutton').style.color = 'blue';
})

使用上述代码时,我收到以下错误:

未捕获的 TypeError:无法在 HTMLButtonElement 上设置未定义的属性“color”。

这是整个项目的代码笔 https://codepen.io/Games247/pen/XWJqebG

如何更改类名下所有元素的文本颜色?

3个回答

document.getElementsByClassName 返回 DOM 节点列表。因此您需要循环遍历它并单独将样式应用于所有元素。

cafeButton.addEventListener('click', function() {
  bg.style.backgroundImage = "url('img/cafe.jpeg')"; //change text colors
  var els = document.getElementsByClassName('topbutton');
  for (var i = 0; i < els.length; i++) {
    els[i].style.color = 'blue';
  }
})
Archie
2020-01-17

getElementsByClassName 为您提供 DOMCollection ,它只是数组。因此,您必须为数组中的每个元素设置样式。 例如。

[...document.getElementsByClassName('topbutton')].forEach((ele)=>{ele.style.color = 'blue';});
Ritesh Khandekar
2020-01-17

您这样做的方式是错误的。 document.getElementsByClassName 为您提供特定类的节点列表。因此您必须循环遍历它。因此,在您的代码中使用以下内容:

var nodeList = document.getElementsByClassName('topbutton')
nodeList.forEach(node => {
  node.style.color = 'blue'
})

或者您也可以使用 document.querySelectorAll('.topbutton') 而不是 document.getElementsByClassName('topbutton')

Nipun Jain
2020-01-17