【发布时间】:2014-06-22 02:54:41
【问题描述】:
我在我的 HTML 代码中创建了一个表格。它有 9 列和 13 行。它被一个 JavaScript 循环完全填满,该循环用几个数组中的人名填充它。但是,我想添加一个验证步骤,以确保一行中没有两个单元格具有相同的值,并且每个单元格的值不会在其正下方的单元格中重复。
由于我只能以 NodeList 的形式访问表中单元格的值,因此我决定将其制成一个数组,以使用 IndexOf 属性在数组中进行搜索:
var table1 = document.getElementsByTagName("td");
var table1Array = []; //number of "td" elements on page
for (i = 0; i < 117; i++) {
table1Array[i] = table1[i].innerHTML;
}
我不知道更优雅的方法(这里有点像初学者)。所以我设置了一些嵌套循环来将每个单元格与我创建的行数组中的每个元素进行比较(对于所有 13 行):
function validateCells() {
for (i = 0; i < 117; i = i + 9) { //increment for going to next column (after 9 cells or elements in array)
for (j = 0; j < 8; j++) {
var curCell = table1Array[i];
var curRow = []; //I'm ignoring the first column which is "date", so it has 8 elements rather than 9
for (k = 0; k < 8; k++) {
curRow[k] = document.getElementById("row" + j).children[k].innerHTML;
}
if (curRow.indexOf(curCell) != -1) {
curCell = "CONFLICT"; //trying to change value in table. Doesn't work.
}
}
}
}
很遗憾,这行不通。我什至不知道修改 curCell 引用变量的值是否真的会改变 table1Array 在该位置的值,如果它会改变表中的数据则更少。
我是否正确使用了 indexOf 属性?我是使用 != 比较运算符还是 !==? indexOf 是否将索引返回为 a 是否还有其他更简单、更优雅的方法来执行此操作?我刚开始使用 jQuery,也许它可以帮助简化代码并减少出错的可能性。
对于所有问题,我很抱歉,我真的很想了解这一切是如何运作的。谢谢!
【问题讨论】:
-
当你创建一个像
var curRow = [8];这样的数组时,它会创建一个只有一个元素的数组,其值为 8 -
所以只需要
var curRow = [];来声明数组?第一个也是?我必须将其更改为var table1Array = [];? -
表有一个 rows 集合,行有一个 cells 集合。您应该能够使用它们的索引访问相邻行中的单元格(例如,将 rows[i].cells[j] 的内容与 rows[i+1].cells[j] 进行比较。
-
@user96872 是的,这将是一个改进,而且,当给定的索引尚不存在时,通常使用
Array.prototype.push而不是直接在数组中的索引处设置值。
标签: javascript jquery arrays loops indexof