如何防止 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">