javascript - 为什么 IE11 对减号的 Node.normalize() 处理不正确?

标签 javascript html internet-explorer dom

我一直遇到一个问题,当使用 Node.normalize() 函数连接相邻的文本节点时,带有某些字符的 DOM 文本节点在 IE 中表现异常。

我创建了一个 Codepen 示例,它允许您在 IE11 中重现错误:http://codepen.io/anon/pen/BxoKH

IE11 中的输出:“- 示例”

Chrome 和早期版本的 IE 中的输出:“测试 - 示例”

如您所见,这会 chop 减号之前的所有内容,减号显然被视为定界字符,显然是由于 Internet Explorer 11(但不是 IE10 或 IE8,甚至 IE6)。

谁能解释为什么会这样,谁知道导致这个问题的其他字符序列?

编辑 - 我编写了一个 codepen,它将测试 Unicode 字符的部分以识别导致此行为的字符。它似乎影响了比我最初意识到的更多的 Angular 色:

http://codepen.io/anon/pen/Bvgtb/ 这会测试 32-1000 的 Unicode 字符并打印那些未通过测试的字符(当节点规范化时 chop 数据)您可以修改它以测试其他字符范围,但要小心在 IE 中增加太多范围,否则它会卡住。

我已经创建了一个 IE 错误报告,并且 Microsoft 报告能够根据我提供的代码示例重现它。如果您也遇到此问题,请对其进行投票: https://connect.microsoft.com/IE/feedback/details/832750/ie11-node-normalize-dom-implementation-truncates-data-when-adjacent-text-nodes-contain-a-minus-sign

最佳答案

这里的其他答案有些冗长且不完整——它们没有遍历完整的 DOM 子树。这是一个更全面的解决方案:

function normalize (node) {
  if (!node) { return; }
  if (node.nodeType == 3) {
    while (node.nextSibling && node.nextSibling.nodeType == 3) {
      node.nodeValue += node.nextSibling.nodeValue;
      node.parentNode.removeChild(node.nextSibling);
    }
  } else {
    normalize(node.firstChild);
  }
  normalize(node.nextSibling);
}

关于javascript - 为什么 IE11 对减号的 Node.normalize() 处理不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337498/

相关文章:

internet-explorer - 使用 Chrome 远程调试工具进行跨浏览器调试

javascript - window.onload() 在第一枪中没有用 IE 8 触发

javascript - 如何在 React-quill 中添加自定义字体大小

javascript - 换行符在 html 的文本区域中打印为空白。我该如何解决

javascript - 触发函数后停止刷新页面

html - Rich Snippet 可以在没有 html 5 页面的情况下使用吗?

html - IE 类 :active with image not working

javascript - 从 Angular 动态创建 HTML 按钮

javascript - 单击后隐藏 DIV (jQuery)

html - 网站结构的丰富片段