Jes*_*Arr 8 html javascript internet-explorer dom
我一直遇到一个问题,当使用Node.normalize()函数连接相邻的文本节点时,具有某些字符的DOM文本节点在IE中表现异常.
我创建了一个Codepen示例,它允许您重现IE11中的错误:http://codepen.io/anon/pen/BxoKH
IE11中的输出:' - 示例'
Chrome和早期版本的IE中的输出:'测试 - 示例'
正如您所看到的,这会截断显示为分隔字符的减号之前的所有内容,这显然是由于Internet Explorer 11中的normalize()的本机实现中的错误(但不是IE10,或IE8,甚至是IE6) ).
任何人都可以解释为什么会发生这种情况,有没有人知道造成这个问题的其他字符序列?
编辑 -我编写了一个codepen,它将测试Unicode字符的各个部分,以识别导致此行为的字符.它似乎影响了比我最初意识到的更多的字符:
http://codepen.io/anon/pen/Bvgtb/ 这将测试32-1000的Unicode字符并打印那些未通过测试的字符(在节点规范化时截断数据)您可以修改它以测试其他字符范围,但是小心在IE中增加范围太多或它会冻结.
我已经创建了一个IE错误报告,Microsoft报告可以根据我提供的代码示例重现它.如果您也遇到此问题,请投票:https: //connect.microsoft.com/IE/feedback/details/832750/ie11-node-normalize-dom-implementation-truncates-data-when-adjacent-text-节点,包含-A-减号
这里的其他答案有点冗长和不完整 - 它们不会遍历完整的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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |