我想使用Javascript更改按钮的背景图像。这是我目前正在尝试的,但它失败了。
HTML代码 -
<tr id="Rank1">
<td><button class="darkSquare"></button></td>
<td><button class="lightSquare" ></button></td>
<td><button class="darkSquare" ></button></td>
<td><button class="lightSquare" ></button></td>
<td><button id="e1" class="darkSquare" ></button></td>
<td><button class="lightSquare" ></button></td>
<td><button class="darkSquare" ></button></td>
<td><button class="lightSquare"> </button></td>
</tr>
JavaScript代码
initializer();
function initializer()
{
var tableRow = document.getElementById("Rank1");
var buttons = tableRow.getElementsByTagName("button");
for(b in buttons)
{
console.log(b.toString());
b.style.backgroundImage = "url('darkSquare.jpg')";
}
}
在控制台中,我收到一条错误,说b.style未定义。
答案 0 :(得分:3)
for (... in ...)
循环在JavaScript应该是这样的:
for (var b = 0; b < buttons.length; b++) {
buttons[b].style.backgroundImage = "url('darkSquare.jpg')";
}
for (... in ...)
实际上迭代了对象的所有“成员”
例如。在var x = {a: 1, b: 2, c: 3}
中使用for(var m in x) console.log(m)
会产生
> a
> b
> c
它适用于数组,因为它认为索引成员是这样的:
var x = [1,2,3];
for (var m in x) console.log(m);
> 0
> 1
> 2
因为它给你的指数好像他们是你无法分辨的成员。陷阱是:
var x = [1,2,3];
x.stuff = 'boo!';
for (var m in x) console.log(m);
> 0
> 1
> 2
> stuff
一般经验法则:在迭代对象中的成员时仅使用for (... in ...)
,在使用数组时使用for (var i = 0; i < array.length; i++)
你总是可以欺骗和使用:
for (var i = 0, item = x[i]; i < x.length; item=x[++i]) {
// now item is the current item
}
答案 1 :(得分:1)
你应该改变你的循环
for(var i = 0; i < buttons.length; i++)
{
buttons[i].style.backgroundImage = "url('darkSquare.jpg')";
}
您使用的循环在变量b中指定了键。由于您没有使用hasOwnProperty函数,因此该循环还可以生成您可能不需要的其他数据。
您也可以使用for-in循环
for(var b in buttons)
{
if (buttons.hasOwnProperty(b))
buttons[b].style.backgroundImage = "url('darkSquare.jpg')";
}
答案 2 :(得分:1)
使用for ( ... in .... )
时,第一个参数是数组中的键,所以你必须像这样使用它:
for( b in buttons ) {
buttons[b].style.backgroundImage = "url('darkSquare.jpg')";
}
中的工作示例