3

我推迟了在这里发帖,因为我觉得我还没有回馈社区的技能水平,但是这个让我完全难过。

我有一个递归 JavaScript 函数,它将一个计数器附加到节点树中所有 id 和 name 元素的末尾。该功能适用​​于 FF、Chrome、Safari 和 IE9,但不适用于 IE8。

function counterAppend(nodes,counter)
{
    var newField = nodes.childNodes;
    for (var i=0;i<newField.length;i++)
    {
        var theName = newField[i].name;
        if (theName)
        {
            newField[i].name = theName + counter;
        }
        var theId = newField[i].id;
        if (theId)
        {
            newField[i].id = theId + counter;
        }

        //recursive part
        if(newField[i].childNodes.length>0)
        {
            newField[i] = counterAppend(newField[i],counter);
        }
    }
    return nodes;
}

我得到了在线错误: newField[i] = counterAppend(newField[i],counter);

在调试中,它说: Breaking on JS runtime error - Object doesn't support this property or method

IE8 和其他浏览器有什么不同,我该如何修改它来解决这个错误?

4

2 回答 2

1

为什么要将函数的返回分配给newField[i]? 我不知道你期望这会做什么。如果代码只是修改 ids/names 你不应该需要返回值。我应该认为这是让 IE 感到困惑的原因,我不确定为什么它不会让其他浏览器感到困惑......

于 2012-12-14T23:23:45.207 回答
0

问题:另外,您收到错误时是否检查过?在收到错误之前,您循环了多少次(如果有的话)?尝试一些输出语句。

一些用于遍历 DOM 的替代算法:g​​etElementsByTagName() 等效于 textNodes

请记住,您可能会遇到以下问题。

IE 不像其他浏览器那样在 childNodes nodeList 中包含纯空白文本节点。我建议您改用 getElementsByTagName() 。这样,您也不必在代码中手动遍历每个级别的节点。

通过http://www.quirksmode.org/dom/w3c_core.html

大多数浏览器都会正确地将标签之间的空白视为仅包含空白字符(例如空格、换行符或制表符)的文本节点,即使空白未呈现,例如标签和标签或中间的空白

标签。但是,某些浏览器(主要是 Internet Explorer 8- 和 9+ 的 quirks 模式)根本不会将此空白区域视为文本节点。

通过http://www.howtocreate.co.uk/tutorials/javascript/dombasics

于 2012-12-14T23:13:13.913 回答