1

这是我定义的一个非标准 HTML 元素(AngularJS 让这很容易):

<exercise id="Sample Exercise" language="Scala" lectureId="5437"> This is the text of the lecture </exercise>

如果我在 HTML 文档中使用此元素,则每次从 CKEditor 的呈现模式切换到源模式时,都会在文档中的每个块元素之间添加一个新的空段落:

<p>&nbsp;</p>

我第二次切换时,我得到了两个插入:

<p>&nbsp;</p>

<p>&nbsp;</p>

第三次切换时,我在每个块级元素之间插入了三个插入,等等:

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

任何人都可以提出解决方法吗?

4

2 回答 2

1

避免自定义元素似乎更容易,因此我使用了 HTML5 数据属性。

<div class="exercise" data-id="Challenge #42" data-language="Scala" data-lectureid="5437">
  <p>Create a program that outputs the meaning of life, the universe, and everything.</p></div>

这成功了。CKEditor 和 AngularJS 之间的更大集成可能会随着时间的推移而发展。

于 2013-09-01T13:20:59.747 回答
0

Pekka 的问题非常好——为什么需要将自定义元素加载到 CKEditor 中?浏览器(做所见即所得编辑的一部分)和 CKEditor(做另一部分)都不知道如何处理这个元素,它意味着什么,如何渲染它以及编辑功能应该如何解决它。例如,如果我理解您的问题,您会写到<exercise>它是一个块元素。CKEditor 和浏览器如何知道它是块元素?:|

您应该了解的第二件事是 CKEditor 不是一个所见即所得的网站构建器,而是一个“文档”编辑器。它的内容必须对它有意义,而该标签将没有它。

无论如何,如果你必须走这条路,你可以做一些事情。

这里有两个答案可以让您了解您可以做什么:CKEditor strips <i> Tag

如果您决定不保护<exercise>标签的来源,而是渲染它们,那么您还应该了解CKEDITOR.dtd我在这里简要描述的对象:ckeditor how to allow for .insertHtml("<customTag myAttr='value'" ></customTag>")

于 2013-09-01T09:34:06.000 回答