1

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

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

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

例如

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

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

也许还有另一种合适的方式来存储这种类型的数据?

4

2 回答 2

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;
于 2012-11-27T14:47:51.783 回答
1

不确定这是否是正确的答案,但您可以尝试在将单元格推入数组之前检查它们是否为空。在循环中放置一个 if 语句,它将检查单元格的值并将其与您需要的值进行比较。这样,您最终应该只得到一个值数组并且没有空值。但是您可能还需要记录索引。

于 2012-11-27T14:48:27.567 回答