Javascript 索引或大小为负或大于允许数量(非负索引)

Javascript 索引或大小为负或大于允许数量(非负索引),javascript,loops,Javascript,Loops,在使用Firefox的过程中,我不断收到这段代码主题行中描述的错误: for(var i = 0; i < tables.length; i++) { var j = rows.length - 1; while(j--) { if(hideDP && tables[i].innerHTML.indexOf(">D<") != -1) {

在使用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)
for(var i=0;i如果(hideDP&&tables[i].innerHTML.indexOf(“>D),如果j>=表中的行数,也会生成该错误,但我看不到确切的问题。

严格按照当前发布的代码,我看到的问题如下:

  • 发布的代码看起来不完整。正在初始化
    的位置?这可能会导致声明的错误

  • 给定
    while(j--)
    var j=rows.length-1;
    行不正确。也就是说,除非您知道最后一行永远不需要删除。如果是这样,请对代码进行注释以澄清

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

  • 2
    if()
    语句根本不依赖于
    j
    (至少当代码发布在这里时是这样)。如果这是真的,那么将条件移到
    j
    循环之外

  • 考虑发布完整的、未编辑的代码,或者在类似的网站上链接到它



  • 更新完整脚本,现在已链接到: 扫描完整的代码,它看起来像是
    表[i].deleteRow(j);
    可以为同一行多次调用

    简单的解决方案是在每一行删除之后添加一条语句,无论如何都应该这样做

    要获得额外积分,请重新分析并简化标志和
    if
    逻辑:



    目标页面的更新,现在已链接到: 检查目标页时,此脚本循环的表包含嵌套表

    这将取消此行中的行计数:
    var rows=tables[i].getElementsByTagName(“tr”);

    有时使表[i]看起来比它实际直接拥有的行更多

    解决方案中,使用内置的行数组;因此该行变为:
    var rows=表[i]。行;

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

  • 循环遍历所有表不是最好的。只针对您需要的表。因此:
    tables=document.getElementsByTagName(“表”);

    应改为:

    var tables = document.querySelectorAll ("div.KonaBody > table.roundy");
    
    …这将只选择4个有效负载表,而不是它们的子表或分散的其他表

  • 通过微调初始表格选择,不需要进行以下可能的测试:

    if(tables[i].getAttribute("style").indexOf("border: 3px solid") != -1)
    
  • 主节前面缺少
    var

  • 错误是在哪一行触发的?实际上,距离结尾大约有6行。我评论说“这一行有错误”"为了让它脱颖而出。我加入了其他代码只是为了上下文。我看不到我在你发布的代码中的任何地方被定义了,所以我的值大概就是问题所在。它是否说明了错误发生在哪一行?这可能会给我们提供更好的线索。有人有什么想法吗?我编辑了OP以使代码更容易在-a-gla看到nce。好主意,Brock。是的,我确实删掉了一部分函数,使它不那么让人难以理解。这是到的链接。是的,似乎我忘了继续。额外的“else if”每个条件中的语句主要用于调试,我将在完成所有这些之后将它们删除。不幸的是,在添加所有continues之后,我仍然会得到相同的错误。如果您有兴趣了解这一点,请查看learnset表的混乱程度。这也是我使用f的页面或者测试..你让我来做这件事。:)不管怎样,代码做出的假设在目标页面上是无效的。请参阅我的更新答案。非常感谢你在这方面的帮助,Brock。现在了解querySelectorAll真的是件好事,因为它使筛选嵌套表变得更加容易。我把它作为“>”符号表示子元素?因此,如果我理解正确,var表的新赋值告诉文档选择所有具有类“KonaBody”的div,这些div具有类“roundy”的子表元素。我说得对吗?不客气。是的,
    是正确的。