javascript - 如何使用 JS DOM 修改 CSS 属性?
问题描述
var toggleButton = document.getElementsByClassName('toggle-button')
for (var i = 0; i < toggleButton.length; i++) {
toggleButton[i].addEventListener('click', function () {
toggleButton[i].parentElement.parentElement.children[2].style.background = "red";
});
}
<div>
<div>
<button class="toggle-button">view</button>
</div>
<div>content</div>
<div>the div which I want to apply changes on</div>
</div>
这段代码有什么问题?当我运行它时,它给了我这个错误“Uncaught TypeError: Cannot read property 'parentElement' of undefined at HTMLButtonElement”。
*我不想在一个类上应用 CSS 更改,我需要使用 DOM 将它应用到这个特定的 div 上。
解决方案
如果它只是一个按钮,你不能这样做:
const toggleButtons = document.getElementsByClassName('toggle-button')
toggleButtons[0].addEventListener('click', () => {
toggleButtons[0].parentElement.parentElement.children[2].style.background = "red";
});
或者,如果您出于某种原因真的想使用 for 循环,这对我来说很好:
var toggleButtons = document.getElementsByClassName('toggle-button')
for(let i=0; i<toggleButtons.length; i++) {
toggleButtons[i].addEventListener('click', function () {
toggleButtons[i].parentElement.parentElement.children[2].style.background = "red";
});
}
更好的是,为一个名为的类创建一个 CSS 规则,red
并使用此代码在所选 div 上打开和关闭该类:
var toggleButtons = document.getElementsByClassName('toggle-button')
for(let i=0; i<toggleButtons.length; i++) {
toggleButtons[i].addEventListener('click', function () {
toggleButtons[i].parentElement.parentElement.children[2].classList.toggle('red')
});
}
CSS:
.red {
background: red
}
推荐阅读
- amazon - 带有 200 响应代码的 Amazon SP-API getOrder API 空响应
- java - 解析 SQL 查询字符串以获取值的映射
- reactjs - 是否有构建具有不同品牌的反应应用程序的最佳实践?
- c++ - 推断指向成员函数模板参数的指针的参数类型
- xml - 如何正确忽略 xslt 中的 xml 元素
- ruby - 如何让 terminal-notifier-guard 显示自定义图标?
- amazon-web-services - 调用 CreateDBInstanceReadReplica 操作时发生错误(InvalidParameterValue):无法验证 PreSignedUrl
- primefaces - 在 preRenderComponent 中设置的渲染 Primefaces 列过滤器值
- python - 制作问答游戏(Python)
- elasticsearch - 从特定容器 kubernetes elastik 获取日志