将表格单元格内容存储到js数组中

时间:2012-11-27 14:41:25

标签: javascript

我需要使用tr和td索引将表格单元格内容存储到数组中,如下所示:

myArray[tr_idx][td_idx]='value';

不需要在数组中存储所有单元格的数据,只需要存储具有特殊内容的数据,但如果我使用索引作为数组的键,则会有许多空数组元素。

e.g。

myArray[2][3]='data1';
myArray[4][3]='data2';

alert (myArray.toSource()) -> [, , [, , , "data1"], , [, , , "data2"]]

也许存在另一种存储此类数据的合适方式?

2 个答案:

答案 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语句,它将检查单元格的值并将其与您需要的值进行比较。这样你应该只得到一个值数组而没有空。但是你可能还需要记录索引。