gpt4 book ai didi

javascript - 使用 TD 标签的数据创建数组

转载 作者:行者123 更新时间:2023-11-28 19:37:32 25 4
gpt4 key购买 nike

我想将 HTML 表导出到将由 JavaScript 程序创建的电子表格中。我考虑过通过 JQuery 库来做到这一点,但我对此了解不多,也不认为在我的情况下会允许这样做。我见过一个使用 XML 的解决方案,但我对 XML 也不太了解。我打算做的是创建一个二维数组并将该数组的内容导出到 Excel 中。不幸的是,我无法控制标记方案,我必须使用 getElementsByTagName。标记方案是通过报告软件创建的。

下面的代码循环到第二行,但停在第二行。我不明白我做错了什么。我希望有人能够解释该错误的补救措施。

<!DOCTYPE html>
<html>
<body>
<table>
<tr><td>a</td><td>1</td></tr>
<tr><td>b</td><td>2</td></tr>
<tr><td>c</td><td>3</td></tr>
<tr><td>d</td><td>4</td></tr>
</table>

<script>

var myNodelist = document.getElementsByTagName("td");
var NumTD= (document.getElementsByTagName("td").length);
var NumTR= (document.getElementsByTagName("tr").length);

var NumCol=NumTD/NumTR;
var array1 = [[]];
var c=0;
var r=0;

alert("NumTD is: "+NumTD);
for (var i=0;i<=NumTD;i++) {
alert("On TD: "+i);

alert(myNodelist[i].innerHTML);

alert("r: "+r);
alert("c: "+c);

array1[r][c]=myNodelist[i].innerHTML;
alert("The array is at: "+array1[r][c]);

if((c+1)==NumCol) {
c=0;
} else {
c++;
}

if(c==0) {
r++;
}

}
</script>
</body>
</html>

最佳答案

问题 1:处理格式。当您正确缩进、有效使用换行符并使用描述性变量名称时,调试自己的代码会容易得多。

问题 2:Uncaught TypeError: Cannot set property '0' of undefined第 19 行。您正在尝试设置 array1[0][0]array1[0]不是一个数组。您需要制作 array[0]在尝试将其用作一个数组之前,先将其作为一个数组使用,如下所示:

if(!array1[i]){
array1[i] = [];
}

这会检查您的数组是否存在。如果没有,则将其设置为空数组。

问题 3:Uncaught TypeError: Cannot read property 'innerHTML' of undefined第 24 行。循环从 0 运行到 8,并且 myNodeList最多只能达到 7。更改 for (var i=0;i<=NumTD;i++)for (var i=0;i<NumTD;i++)通过限制循环的边界解决了这个问题。

问题 4:搞乱 3 个索引( rci )是不必要的,并且不会让事情变得更容易。其一,ci始终相等,因此我们可以从 c = 0 开始运行循环至c < numTD .

问题 5:检查是否 c + 1等于列数是笨拙的。相反,你的第二个维度应该是 c % numCol ,这只是 c 的剩余部分除以numCol 。它在这里完美地工作。我们还可以增加 rc % numCol是 0。

var myNodelist  =   document.getElementsByTagName("td");
var numTD = myNodelist.length;
var numTR = document.getElementsByTagName("tr").length;

var numCol = numTD/numTR;
var array1 = [];

var r = 0;

for(var c = 0; c < numTD; c++){
array1[r] = array1[r] || [];

array1[r][c % numCol] = myNodelist[c].innerHTML;

if(c % numCol){
r++;
}
}

Working example

问题 6:这种方法通常是完成任务的笨拙方法。抓取每一行,迭代它们,然后抓取各个单元格会更干净。 编辑:这是在我看到 @dc5 的编辑之前得到的。他的作品也一样。

var rows        =   document.getElementsByTagName("tr");
var results = [];

for(var i = 0; i < rows.length; i++){
var cells = rows[i].getElementsByTagName("td");

results[i] = [];

for(var j = 0; j < cells.length; j++){
results[i][j] = cells[j].innerHTML;
}
}

Working example

关于javascript - 使用 TD 标签的数据创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com