【发布时间】:2010-07-30 20:18:05
【问题描述】:
contenteditable 的状态
所见即所得编辑器生成的标记非常糟糕。它充满了样式属性,通常甚至不是有效的 HTML(缺少结束标签、重叠样式等)。对于contenteditable 引入的问题,是否有任何既定的解决方案?如果没有,我该如何创建一个?
无效的 HTML
例如,在一个流行的富文本编辑器中输入一个无序列表和一行文本后,我会看到以下 HTML:
<ul><li>foo</li><li>bar</li></ul><div>baz
div 标签从何而来?为什么不关门?为什么不是一个段落——当然是正确关闭的?这可以预防吗?
非语义 HTML
另一位编辑制作了以下内容:
<p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt 'Times New Roman'"> </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">Lorem</span></p><p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt 'Times New Roman'"> </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">ipsum</span></p>
这是有效的标记,但它在语义上很糟糕!编辑器插入了 literal 项目符号字符,而不是样式化的无序列表。作为开发人员,我不知道如何处理 contenteditable 生成的标记。就造型而言,它完全没用。
换人
直到最近,我一直在使用 Markdown 作为从用户那里生成语义正确的 HTML 的工具。但是,Markdown 缺少我的用户所要求的某些功能(非技术人员的易用性、图像定位等)。在寻找一个可以生成有效的语义标记数周的所见即所得编辑器之后,我发现contenteditable 使这变得不可能。有人在谈论这些问题的解决方案吗?我该如何参与。
[更新]澄清
我想我之前并没有完全清楚。我不是在寻求解决contenteditable 问题的方法。我找到了很多,包括下面提到的大部分。我试图找到的是这些问题的根本原因。为什么contenteditable 这么坏?是因为技术问题还是遗留代码问题?此外,正在采取什么措施来修复它?这项工作在哪里进行?
[更新]谷歌文档
上面第二个示例中的 HTML 来自 Google 文档编辑器。但是,正如AlfonsoML 在下面指出的那样,Google 文档在其编辑器中不使用contenteditable。他们的技术在here进行了解释。
【问题讨论】:
标签: javascript html css wysiwyg contenteditable