Javascript 索引或大小为负或大于允许数量(非负索引)
在使用Firefox的过程中,我不断收到这段代码主题行中描述的错误: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) {
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;
或添加注释以表明逻辑是故意的
2if()
语句根本不依赖于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”的子表元素。我说得对吗?不客气。是的,
是正确的。