我在函数中声明了一些变量,并且它们的值在for
循环中得到更新。在function
的末尾,我希望看到其中一些变量的最终值。
花了一整天的时间来解释为什么我的想法没有发生,我在这里发布功能以获得一些见解。
在函数中,您可以看到两个alert
- 第一次运行for
的每次迭代,并给出变量的当前值。我不想要这个警报,但是已经将它插入到这里只是为了表明代码确实在for loop
内完成了我想要它做的事情。
我想要的只是最后一个alert
....但由于某种原因它永远不会出现!
据我了解,如果在函数的开头声明了一个变量,它的值可以直到最后一次访问......如果这是正确的,为什么最后的警报不会出现?
注意:此代码正在MsWord生成的html上运行,其中包含无数不必要的span标记,我需要删除它才能将内容用于文档目的。无法获得这些值是阻止我完成一个小工具的原因,我打算用它来为一个项目转换大约400个MsWord页面!
function uponetag()
{
var spank=document.getElementsByTagName('span'); //look at all span tags
var spann=spank.length; //number of span tags on the page
var yes=0;
var no=0;
for (i=0; i<=spann; i++)
{
var spancont=spank[i].innerHTML;
//get the parent node
var outer = spank[i].parentNode;
outertag=outer.tagName.toLowerCase();
//get the inner html of the parent node
var outercont=outer.innerHTML;
//create a string manually placing the opening and closing span tags around the current span content
var compareit=("<span>"+spancont+"</span>");
//compare the manual string to inner content of the parent node
if (outercont===compareit)
{
//replace the inner html of the parent node with the current span content
outer.innerHTML=spancont;
yes=yes+1;
}
else
{
no=no+1;
}
alert ("Converted = "+yes+"\n\n Not converted = "+no); //this alert works
}
alert ("The page originally had "+spann+" span tags. \n ON EXIT: Converted = "+yes+"\n\n Not converted = "+no);
//THIS ALERT DOESN'T!!! WHY?????
}
我已尝试过这里建议的所有更改(i = spannum,var1 = ....等),但没有成功!实际上,在执行此操作时,我发现虽然原始页面中有49个跨度,但是在29次运行(20 yeses和9 nos)之后,脚本会在firebug控制台中抛出错误。
答案 0 :(得分:4)
代码读取超出数组长度,导致错误。
这就是为什么循环警报会触发但是循环外的最终警报不会触发。
此循环
for (i=0; i<=spann; i++)
包括i = spann,超过结束时为1。
我认为您打算使用
for(i=0;i<spann;i++)
这是正确的。
我还应该注意Javascript没有块级变量。它有function
个范围的变量。在var
循环块中声明for
与在当前var
初始化时声明function
(称为提升)并在循环中设置它相同。 / p>
答案 1 :(得分:0)
for (i=0; i<=spann; i++)
//change it to :
for (i=0; i<spann; i++)