1

我在浏览旧的 Ext 文档时发现了一个奇怪的问题,http ://extjs.cachefly.net/ext-3.2.1/docs/?class=Ext.grid.PropertyGrid

继承框(右上角)的布局有些破碎。

破碎的布局 http://img339.imageshack.us/img339/374/bildschirmfoto20110427u.png

但是执行后

var resblock = document.getElementById('docs-Ext.grid.PropertyGrid').getElementsByClassName('res-block-inner')[0];
resblock.innerHTML = resblock.innerHTML; // should be a no-op(?)

一切正常。

好的布局 http://img204.imageshack.us/img204/374/bildschirmfoto20110427u.png

怎么可能?Firefox 4 中的错误?


编辑 一个最小的测试用例:http: //jsfiddle.net/uZ3eC/

4

1 回答 1

4

是的,它看起来像一个错误Firefox 4 的方式, 在处理处理行尾。

resblock 元素是一个<pre>包含许多文本节点的元素,这些节点处理新行和缩进。当它们通过脚本构造时,它们包含一个回车符 (U+000D),后跟一系列不间断的空格。

但是,在运行之后,resblock.innerHTML = resblock.innerHTML;它们现在包含一个 LINE FEED (U+000A),后跟不间断的空格。

似乎 Firefox 4 仅将换行符视为换行符,并将类层次结构的部分呈现在新行上。

编辑:鲍里斯说的。

HTML5 草案规范第8.2.2.3 节预处理输入流说:

U+000D CARRIAGE RETURN (CR) 字符和 U+000A LINE FEED (LF) 字符被特殊处理。必须删除后跟 LF 字符的任何 CR 字符,并且必须将任何不跟 LF 字符的 CR 字符转换为 LF 字符。因此,HTML DOM 中的换行符由 LF 字符表示,并且在标记化阶段的输入中永远不会有任何 CR 字符。

于 2011-04-27T00:48:48.400 回答