我有一个关于在JavaScript中循环的问题。大多数情况下我使用jQuery,但现在我决定用纯JavaScript做一个简单的游戏。
如果我使用此方法循环遍历所有'td',则cells[i]
是td元素,我可以将事件附加到它们。
for(i = 0; i < cells.length; i++){
if(cells[i].nodeName == 'TD')
{
cells[i].onclick = function(){
// call funciton on onclick
};
}
}
但如果我这样做,每个元素只是索引号,最后两个元素是length
和item
。
for(var cell in cells){
// cell is a number
}
有什么不同,为什么foreach-loop不像我想要的那样工作?
答案 0 :(得分:2)
cell
是一个数字,因为它是cells
HTMLCollection的索引。在第二个循环中,您将使用如下值:
for(var cell in cells){
if(cells[cell].nodeName == 'TD')
{
cells[cell].onclick = function(){
GameTurnExecute(player);
};
}
}
答案 1 :(得分:0)
你也可以说:
for(var cell in cells){
if(cells.hasOwnProperty(cell))
{
cells[cell].onclick = function(){
GameTurnExecute(player);
};
}
}
不要看到来自原型链的属性。 (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty)
事实上,几乎每次在javascript中使用for in
时都要使用hasOwnProperty。