我需要使用tr和td索引将表格单元格内容存储到数组中,如下所示:
myArray[tr_idx][td_idx]='value';
不需要在数组中存储所有单元格的数据,只需要存储具有特殊内容的数据,但如果我使用索引作为数组的键,则会有许多空数组元素。
e.g。
myArray[2][3]='data1';
myArray[4][3]='data2';
alert (myArray.toSource()) -> [, , [, , , "data1"], , [, , , "data2"]]
也许存在另一种存储此类数据的合适方式?
答案 0 :(得分:2)
为什么不将它们存储为单独的2项数组[row,col]
?由于表格单元格已经可以通过tableElement.rows[].cells[]
访问,因此您可以使用2个索引从表格中访问它们。
var storedCells = [];
// Store row 2, column 3
storedCells.push([2,3]);
访问:
// Table row:
storedCells[0][0]
// Table column
storedCells[0][1]
//As in :
tableElement.rows[storedCells[0][0]].cells[storedCells[0][1]].innerHTML = "New cell value!"
甚至更干净,如果你更喜欢使用对象而不是数组:
storedCells.push({row: 2, column: 3});
storedCells.push({row: 4, column: 6});
访问:
tableElement.rows[storedCells[0].row].cells[storedCells[0].column].innerHTML = "New cell value!";
最后,如果您实际上不需要行/列索引,而是DOM节点本身,只需将它们推送到您的阵列上。
var storedCells = [];
// Save references to some individual <td> nodes
storedCells.push(tableElement.rows[1].cells[2]);
storedCells.push(tableElement.rows[4].cells[6]);
然后对它们进行简单的修改:
// Set the value of the second element:
storedCells[1].innerHTML = "New content!";
如果您需要能够将单元格坐标附加到后端的新值,那么一个好的解决方案是扩展上面的对象{}
示例以包含value
属性。服务器可以在JSON中传回新值。
storedCells.push({row: 2, column: 3, value: ""});
storedCells.push({row: 4, column: 6, value: ""});
您的后端应该将JSON响应发送回包含相同类型对象的脚本,其中value:
已填充新的单元格值。然后,您可以将其传递回表格:
// Pass the value attribute received from JSON into the cell's contents
tableElement.rows[storedCells[0].row].cells[storedCells[0].column].innerHTML = storedCells[0].value;
答案 1 :(得分:1)
不确定这是否是正确答案,但您可以尝试检查单元格是否为空,然后再将它们推入阵列。在循环中放置一个if语句,它将检查单元格的值并将其与您需要的值进行比较。这样你应该只得到一个值数组而没有空。但是你可能还需要记录索引。