我正在用javascript处理TextNode,因此(不幸的是)我需要支持IE6。 Node.normalize()崩溃了,我需要解决此问题。我的第一个倾向是使用其他DOM方法重新实现它。我将如何实现呢?

最佳答案

与此处发布的其他版本相比,以下版本更短,更有效。改进之处包括:

  • 不再重复调用node.childNodesnode.childNodes.length
  • 不创建额外的文本节点;相反,对于每个合并,保留第一个现有的文本节点,并使用其appendData()方法
  • 较短的

  • 编码:
    function normalize(node) {
        var child = node.firstChild, nextChild;
        while (child) {
            if (child.nodeType == 3) {
                while ((nextChild = child.nextSibling) && nextChild.nodeType == 3) {
                    child.appendData(nextChild.data);
                    node.removeChild(nextChild);
                }
            } else {
                normalize(child);
            }
            child = child.nextSibling;
        }
    }
    

    09-25 20:09