我有以下 JavaScript 代码来在网站上“显示”XML:
function createChild(node,tabindex){
var child = node.childNodes;
var r = '';
var tabs = '';
for(i=0;i<tabindex;i++){
tabs += "\t";
};
for(i=0;i<child.length;i++){
if(child[i].nodeType == 1){
r += tabs+"<"+child[i].nodeName+">\n";
if(child[i].hasChildNodes()){ r += createChild(child[i],1); }; // here is where it fails!
r += tabs+"</"+child[i].nodeName+">\n";
}
}
return r;
};
function parseXML(xml){
var doc = new DOMParser().parseFromString(xml,'application/xml');
var node = doc.getElementsByTagName('*')[0];
var r = '';
r += "<<span class=\"highlight highlight-blue\">"+node.nodeName+"</span>>\n";
if(node.hasChildNodes()){ r += createChild(node,1); };
r += "<<span class=\"highlight highlight-blue\">/"+node.nodeName+"</span>>\n";
$('.viewer').html(r);
};
这在 XML 上工作得很好,如下所示:
<properties>
<property></property>
</properties>
但当有多个孩子时,它就不起作用了,如下所示:
<properties>
<property>
<value></value>
</property>
</properties>
该代码一直运行,直到我的浏览器崩溃。我think其中有一个无限循环,但我不确定。有人给我提示吗?
这就是为什么你应该always声明你的变量:
// declare 'i'
for(var i = 0; i < tabindex ; i++){
tabs += "\t";
};
如果你不声明i
在函数作用域中,它将是全局的,从而干扰for
在递归函数调用中循环:
The i
变量设置为0
在第一个函数调用中。
该函数调用自身。
The i
变量设置为0
.
函数返回。
i
is now 0
再次,因此第一帧中的循环将永远运行。
所以在某处createChild
函数,你必须声明i
,在第一个循环之前或在第一个循环中。您还可以使用let
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)