【问题标题】:Browser automatically inserts unwanted code on enter in contenteditable div浏览器在 contenteditable div 中输入时自动插入不需要的代码
【发布时间】:2013-08-25 09:10:03
【问题描述】:

我有一个内容可编辑的 div,里面有一个 ul 和一些 li。现在,如果我想在列表后面添加更多文本,我将光标放在最后一个 li(“3”)之后,然后按两次 Enter。在第一次输入后,它添加了一个新的 li,在第二次输入后,它关闭了 ul 并在其中添加了一个带有 br 的 div,这样我就可以开始在其中写入了。 (Example #1)

预期代码:

<div contenteditable="true">
<p>Test</p>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul><div><br></div>
</div>

这是预期的行为。但是,如果为 li 定义了一些样式表,浏览器不仅会添加带有 br 的新 div,还会根据您定义的样式添加不同的代码 (Example #2)。

结果代码:

<div contenteditable="true">
<p>Test</p>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul><div><font face="Arial"><span style="line-height: 20px;"><br></span></font></div>
</div>

我可以做些什么来防止这种浏览器行为?我确实想要一些 li 的样式表,但我不希望浏览器在我的 html 代码中插入它喜欢的任何内容。

【问题讨论】:

  • 您具体输入了什么内容以及您在哪个浏览器上进行测试?当我在 Firefox 中执行此操作时(在 3、2x 后单击以跳出列表,键入文本),我得到 &lt;li&gt;3&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;text&lt;br&gt;&lt;/p&gt;&lt;ul&gt; &lt;/ul&gt; 即没有样式的 p 和额外的 ul
  • 对不起,忘了说...问题出现在Chrome 29。在3、2x回车后点击,就会得到我上面写的“Resulting code”。
  • 所以每个浏览器都不同。那我不知道你有没有什么可以做的。您总是可以编写一个 Javascript 例程来检查是否存在 &lt;font&gt; 元素,或者在 Firefox 的情况下检查是否存在空 &lt;ul&gt; 元素,但这感觉像是一个补丁,而不是真正的解决方案。

标签: html css browser contenteditable


【解决方案1】:

这是更大的 Blink 和 Webkit(Chrome、Opera、Safari)错误集之一。在 CKEditor 的开发站点上有一个 ticket grouping some of them,我也在 Blink 和 Webkit 的站点上报告了它:

但没有人回应... ;/

如前所述,只有两种方法可以解决这个问题:

  • 编写自己的退格、删除和输入键支持(非常复杂),
  • 不要使用任何样式(非常不酷)。

所以恐怕目前除了提醒 Blink 和 Webkit 团队他们的引擎不应该生成这种糟糕的 HTML 之外别无选择。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 2015-07-04
  • 2014-03-28
  • 2013-11-04
  • 2011-10-05
  • 2010-10-02
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多