Javascript TypeError:…[i]未定义

Javascript TypeError:…[i]未定义,javascript,jquery,Javascript,Jquery,脚本的这一部分有什么问题: function refreshLabels() { // loop through all document elements var allnodes = document.body.getElementsByTagName("*"); for (var i=0, max=allnodes.length; i < max; i++) {

脚本的这一部分有什么问题:

        function refreshLabels() {

            // loop through all document elements
            var allnodes = document.body.getElementsByTagName("*");

            for (var i=0, max=allnodes.length; i < max; i++) {
                // get id current elements
                var idname = allnodes[i].id;
                // if id exists, set get id current elements
                if (idname !== '') {
                    allnodes[i].textContent = multilang.get(idname);
                }
            }
        }
萤火虫总是说: TypeError:allnodes[i]未定义

我找不到任何解决方案来解决这个问题-这部分错了吗

"for (var i=0, max=allnodes.length; i < max; i++)"

顺便说一句,Chrome也这么说-所以这不仅仅是FF问题。

更改文本内容的问题在于,您实际上是在改变allnodes数组的节点子节点,从而也改变allnodes数组的长度,减小其大小,以便循环继续运行到新缩短的数组的末尾

请参阅MDN web文档了解正在执行的操作:

函数刷新标签{ //循环遍历所有文档元素 var allnodes=document.body.getElementsByTagName*; console.logallnodes.length 对于变量i=0,max=allnodes.length;i我已经通过替换allnodes[I]测试了代码;使用console.logallnodes[i].textContent。我没有收到任何错误。。。你能告诉我们更多关于错误信息的信息吗?它在代码中指向哪一行?我无法足够快地阅读文本内容的完整描述,但是否确定分配给它不会破坏子元素?您正在缓存开始时的长度,因此如果可以,这是一个简单的解释。@Ivan-这很奇怪-这可能是加载问题吗?可能页面不是rdy,脚本会触发或类似于这样的内容?我认为@ASDFGerte是正确的:在节点上设置此属性将删除其所有子节点,并用具有给定值的单个文本节点替换它们。好的,谢谢你的提示!该死的@用户10047187,我想你应该发布另一个关于如何解决这个问题的问题,你似乎想翻译你的页面。