如何比较单元格在JavaScript表彼此和测试的平等?indexOf是如何工作的
How to compare cells in JavaScript table to each other and test for equality? How does indexOf work?
我在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,也许它可以帮助简化代码,使其更不容易出错。
抱歉所有的问题,我真的想了解这一切是如何工作的。谢谢!
您应该得到一个行数组,每行是一个单元格数组。这样验证就容易多了。我不确定你想怎么表现这种冲突。在这个演示中,我只是用红色突出显示了重复的单元格(冲突)(至少我喜欢这种显示冲突的方式,而不是修改冲突单元格的文本)。