我的屏幕上有12个图块(100px×100px正方形)。
默认情况下,每个图块都设置为display:block
并具有白色背景background: rgb(255,255,255);
如果单击某个图块,背景将变为橙色rgb(255,161,53)
。使用以下功能:
function changeColour(id){
{
var current_bg = document.getElementById(id).style.backgroundColor;
if(current_bg != "rgb(255, 161, 53)"){
document.getElementById(id).style.backgroundColor = "rgb(255,161,53)";
} else if(current_bg == "rgb(255, 161, 53)"){
document.getElementById(id).style.backgroundColor = "rgb(255,255,255)";
}
}
在页面底部,我有一个名为“showHide”的按钮,按下后我只想显示橙色背景的图块。一旦再次按下,我希望所有的瓷砖都出现。
答案 0 :(得分:1)
我对元数据的含义
分解:
orange
设置为班级列表,或使用切换将其删除。实际的橙色着色来自样式表。在其班级名称orange
中没有:not()
的磁贴获得白色背景。orange
的班级列表都会被切换的hide
班级名称隐藏。我在这里使用了不同的方法,使用类名作为选择器并使用它们来获得所需的结果。
function changeColour() {
this.classList.toggle("orange");
//if hiding is on we need to also hide that block
if (this.parentElement.querySelectorAll("div.tiles.hide").length > 0)
{
this.classList.add("hide");
}
}
var divs = document.querySelectorAll("div.tiles");
//use Array.prototype.forEach to iterate over nodelist
Array.prototype.forEach.call(divs, function(element){
element.addEventListener("click", changeColour);
});
document.querySelector("button.hide").addEventListener("click", showHide);
function showHide(){
Array.prototype.forEach.call(divs, function(element){
if (!element.classList.contains("orange"))
{
element.classList.toggle("hide");
}
});
}

div.tiles {
display: inline-block;
width: 100px;
height: 100px;
border: 1px solid grey;
}
div.tiles:not(.orange) {
background-color: #ffffff;
}
div.tiles.orange {
background-color: rgb(255,161,53);
}
div.tiles.hide {
display: none;
}

<div class="tiles"></div>
<div class="tiles"></div>
<div class="tiles"></div>
<div class="tiles"></div>
<div class="tiles"></div>
<button class="hide">show/hide white tiles</button>
&#13;