javascript - 我想制作一个“剧透警报”按钮 (2)
问题描述
首先,感谢你们,我得到了我想要的。但是,我又想到了一个问题。
let btn = document.getElementById("change");
let spoilSpan = document.getElementById("spoiled");
btn.addEventListener("click", spoilerAlert);
function spoilerAlert() {
spoilSpan.classList.toggle("show");
}
.spoiler {
display: inline-block;
background: #000;
padding: 1px;
}
.show {
display: inline-block;
background: none;
}
<button id="change">Spoiler Alert</button>
<br><br>
<span>Not Spoiler</span>
<br><br>
<span class='spoiler' id='spoiled'>
Spoiler
</span><br><br>
<span>Not Spoiler</span>
<br><br>
<span class='spoiler' id='spoiled'>
Spoiler
</span>
我希望它与一个按钮一起工作。但是,最后一个“扰流板”不起作用。
我该怎么办?
我很抱歉什么都不知道。
解决方案
拥有多个相同的元素id
会使您的 HTML 无效。在这种情况下,getElementById
将仅返回不是您需要的第一个匹配元素。
改为这样写:
function spoilerAlert() {
Array.from(document.getElementsByClassName('spoiler')).forEach(x => {
x.classList.toggle("show");
});
}
您的代码段固定如下:
let btn = document.getElementById("change");
let spoilSpan = document.getElementById("spoiled");
btn.addEventListener("click", spoilerAlert);
function spoilerAlert() {
Array.from(document.getElementsByClassName('spoiler')).forEach(x => {
x.classList.toggle("show");
});
}
.spoiler {
display: inline-block;
background: #000;
padding: 1px;
}
.show {
display: inline-block;
background: none;
}
<button id="change">Spoiler Alert</button>
<br><br>
<span>Not Spoiler</span>
<br><br>
<span class='spoiler' id='spoiled'>
Spoiler
</span><br><br>
<span>Not Spoiler</span>
<br><br>
<span class='spoiler' id='spoiled'>
Spoiler
</span>
推荐阅读
- dart - Dart 迫使我在子类中实现非抽象方法
- reactjs - 为我的 React 产品组合存储大量高分辨率图像的最佳方式?
- javascript - 尽管来自源的数据已更新 JavaScript php,但 Typeahead 下拉列表是相同的
- azure-container-instances - 使用多个容器更新 Azure 容器实例中的单个容器
- r - 测试 R 中的 shapefile 中是否存在纬度/经度对
- javascript - Vue:将选择值从组件返回到父组件
- excel - Excel:使用参考范围内的生效日期根据单个查询日期查询适用记录范围的方法
- pandas - Matplotlib 的 axhline 函数与日期时间对象
- mysql - 使用python 3.6的mysql查询(字符串变量在单引号中)
- python - Grakn 1.7.1 的数据加载问题