我有一个内容可编辑的div元素,其中包含一个使用<ol>
的列表。如果用户选择的其他位置不是<li>
则不会创建新的<li>
项。如果用户在创建列表后按两次 Enter 键,则不会创建<li>
项。
如何强制div 元素中的所有行都为<li>
项目?
我没有小提琴帐户,但是如果您在此处的示例中添加内容可编辑标签,则可以查看/测试它的实际效果 http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_lists
contenteditable
的效果因浏览器而异,但当列表位于可编辑区域内而不是声明为可编辑元素时,问题中描述的行为很常见。原因似乎是由于封闭元素是可编辑的,实现者认为应该有一种方法可以退出列表,例如在其后添加内容。
如果您更改单个内容可编辑块,例如
<div contenteditable>
some stuff
<ol><li>test</li></ol>
some other stuff
</div>
到三个这样的块,
<div contenteditable>
some stuff
</div>
<ol contenteditable><li>test</li></ol>
<div contenteditable>
some other stuff
</div>
然后行为发生变化:在列表中按两次 Enter 只会在那里添加一个空项目。
但是<ol contenteditable>
有一个问题:它似乎使IE 9省略了列表编号(或ul
列表项目符号),没有明显的方法将其放在那里。(编辑:这只发生在怪癖模式下。但是此错误可能存在于不同模式下的早期IE版本中。我建议在包装器元素上使用contenteditable
,而不是像ol
那样直接列出元素。