gpt4 book ai didi

javascript - 索引或大小为负或大于允许的数量(非负索引)

转载 作者:行者123 更新时间:2023-11-29 09:59:01 24 4
gpt4 key购买 nike

在使用 Firefox 时,我不断收到此代码块主题行中描述的错误:

for(var i = 0; i < tables.length; i++)
{
var j = rows.length - 1;
while(j--)
{
if(hideDP && tables[i].innerHTML.indexOf(">D<") != -1)
{
if(!platTag && !soulSilverTag && pearlTag)
{
tables[i].deleteRow(j);//ERROR IS ON THIS LINE
}
}

}//end while loop (rows)
}//end for loop (tables)

我怀疑这个错误是因为我对制作反向循环有些陌生,但我在这个实例中特地制作了一个反向循环,因为它可以更容易地从表中删除行。另请注意,j 类似于 24 而 i 为 0,因此它们是非负数。有人可以帮我解释一下吗?

编辑:完整代码can be found here .

最佳答案

严格处理当前发布的代码,这是我看到的问题:

  1. 发布的代码看起来不完整。 rows 在哪里被初始化?这可能会导致所述错误。

  2. 给定while(j--)var j = rows.length - 1; 行不正确。也就是说,除非您知道最后一行永远不需要删除。但如果是这种情况,请注释代码以使其清楚。

    例如,如果有 4 行,当前代码将 j 初始化为 3,但是由于 -- 运算符的位置,循环内部看到:2, 1, 0。对于所示代码,使用 var j = rows.length; 或添加注释以表明该逻辑是经过深思熟虑的。

  3. 2 个if() 语句根本不依赖于j! (至少代码已发布在这里。)如果这是真的,则将条件移到 j 循环之外。

  4. 考虑发布完整的、未经编辑的代码。或者在 Pastebin 这样的网站上链接到它.



完整脚本的更新,现在它已链接到:

扫描完整代码,看起来tables[i].deleteRow(j);可以针对同一行调用多次。

无论如何都应该做的简单解决方案是添加一个 continue每行删除后的语句。

为了加分,重新分析并简化标志和 if 逻辑。 :)



更新目标页面,现在它已链接到:

检查目标页面,此脚本循环的表格包含嵌套表格。

这会导致这一行的行数减少:
var rows = tables[i].getElementsByTagName("tr");

有时让 table[i] 看起来比它实际拥有的行更多。

解决方案,使用内置的行数组;所以这条线变成:var rows = tables[i].rows;

~~~~
在检查与目标页面相关的脚本时,其他一些问题似乎很明显:

  1. 最好不要遍历所有表格。只瞄准你需要的那些。所以这个:
    tables = document.getElementsByTagName("table");

    应该改为:

    var tables = document.querySelectorAll ("div.KonaBody > table.roundy");

    ...这将只选择 4 个有效负载表,而不是它们的子表或分散在各处的其他表。

  2. 通过微调初始表选择,无需进行以下可能的测试:

    if(tables[i].getAttribute("style").indexOf("border: 3px solid") != -1)
  3. majorSections 初始化前缺少 var

关于javascript - 索引或大小为负或大于允许的数量(非负索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313201/

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