javascript - 如何将 HTML 集合复制到 JS 中的数组
问题描述
我想将网页中所有按钮的颜色保存在数组中并更改按钮的颜色。稍后我希望能够访问这些颜色并再次将其转回。这是我的 HTML 代码
var all_buttons = document.getElementsByTagName('button');
var copyAllButtons = [];
for (let i = 0; i < all_buttons.length; i++) {
copyAllButtons.push(all_buttons[i]);
}
function buttonColorChange(buttonThis) {
if (buttonThis.value === 'red') {
buttonsRed();
} else if (buttonThis.value === 'reset') {
buttonColorReset();
}
}
function buttonsRed() {
for (let i = 0; i < all_buttons.length; i++) {
all_buttons[i].classList.remove(all_buttons[i].classList[1]);
all_buttons[i].classList.add('btn-danger');
}
}
function buttonColorReset() {
for (let i = 0; i < all_buttons.length; i++) {
console.log(typeof(all_buttons));
all_buttons[i].classList.remove(all_buttons[i].classList[1]);
console.log(copyAllButtons[0].classList);
all_buttons[i].classList.add(copyAllButtons[i]);
}
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<div class="flex-box-pick-color">
<form action="">
<select name="backdrop" id="background" onchange="buttonColorChange(this)">
<option value="random">Random</option>
<option value="red">Red</option>
<option value="reset">Reset</option>
</select>
</form>
<button class="btn btn-primary">Whatever</button>
<button class="btn btn-danger">Nothing</button>
<button class="btn btn-warning">:)</button>
<button class="btn btn-success">(:</button>
</div>
所以我有这个下拉菜单,如果你选择红色,页面上的所有按钮都会变成红色。但是如果你选择重置,它必须把颜色改回来。目前,当 all_buttons 变量发生变化时,copyAllButtons 变量也在发生变化,所以它给了我错误:
未捕获的 DOMException:无法在“DOMTokenList”上执行“添加”:提供的令牌(“[object HTMLButtonElement]”)包含 HTML 空格字符,这些字符在令牌中无效。
我能做些什么?
解决方案
您访问 DOM 节点,而不是实际的类。你的 buttonColorReset 函数应该是这样的:
function buttonColorReset() {
for (let i = 0; i < all_buttons.length; i++) {
console.log(typeof(all_buttons));
all_buttons[i].classList.remove(all_buttons[i].classList[1]);
console.log(copyAllButtons[0].classList);
all_buttons[i].classList.add(copyAllButtons[i].className)
}
}
推荐阅读
- amazon-web-services - Aurora serverless 兼容版本
- postgresql - 添加订单时,Postgres 性能下降
- java - java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager
- swift - 在提交到应用商店之前混淆 Swift 代码
- mongodb - ReactiveMongo 聚合计数函数
- google-apps-script - 谷歌问题的新回复来时如何自动添加新工作表
- python - 将 graph.pb 冻结到 tflite 以在 Google 珊瑚上运行(缺少输入和输出数组)
- python - 'ListWrapper' object has no attribute 'name' when plotting keras custom model
- http - 可以在 Firefox 开发工具上看到在 http 上提交的登录凭据吗?
- laravel - 如何在刀片文件中编译 scss 样式