gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:47:25 34 4
gpt4 key购买 nike

我一直遇到一个问题,当使用 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com