如何防止 CKEditor 更改标签顺序
How to prevent CKEditor from changing tag order
CKEditor 转换如下代码:
<h3>H3
<ul>
<li>el 1</li>
<li>el 2</li>
</ul></h3>
至
<h3>H3 </h3>
<ul>
<li>el 1</li>
<li>el 2</li>
</ul>
有没有办法防止这种行为?
TL;DR; no
CKEditor 是一个 HTML4/xHTML 编辑器,基于 DTD,它给出了关于哪些标签可用以及 where/how 它们可以出现在 DOM 中的一整套规则。 =21=]
如果您检查 DTD
,您会发现 H3
是一个 heading
标签(它是一个 block
),其中只能包含内联标签。
<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
....
<!ENTITY % block
"p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
....
<!ELEMENT h3 %Inline;>
<!ATTLIST h3
%attrs;
%TextAlign;
>
ul
标签也是一个block
标签,所以它不能出现在h3
标签内:
<!ENTITY % lists "ul | ol | dl | menu | dir">
....
<!ENTITY % block
"p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
CKEditor 转换如下代码:
<h3>H3
<ul>
<li>el 1</li>
<li>el 2</li>
</ul></h3>
至
<h3>H3 </h3>
<ul>
<li>el 1</li>
<li>el 2</li>
</ul>
有没有办法防止这种行为?
TL;DR; no
CKEditor 是一个 HTML4/xHTML 编辑器,基于 DTD,它给出了关于哪些标签可用以及 where/how 它们可以出现在 DOM 中的一整套规则。 =21=]
如果您检查 DTD
,您会发现 H3
是一个 heading
标签(它是一个 block
),其中只能包含内联标签。
<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
....
<!ENTITY % block
"p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
....
<!ELEMENT h3 %Inline;>
<!ATTLIST h3
%attrs;
%TextAlign;
>
ul
标签也是一个block
标签,所以它不能出现在h3
标签内:
<!ENTITY % lists "ul | ol | dl | menu | dir">
....
<!ENTITY % block
"p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">