CKEDITOR在HTML表

时间:2017-10-04 07:32:19

标签: javascript drupal ckeditor

对于客户,我们必须开发一个允许用户从Drupal中选择内容引用的插件。此引用作为标记插入到WYSIWYG字段中。

为了在富文本内容中清晰可识别,我们实施了一个自定义标记,如下所示“<customtag token="...">label</customtag>”,将标记显示为突出显示的框。

我们使用CKEditor 4.4.8。

直接在“P”标签中使用时,自定义标签会正确显示:

<p><customtag token="...">label</customtag></p>

但是当我们将它插入HTML表格时,它会被CKEditor剥离。

我们得到了:

<table>
  <tr>
     <td>label</td>
  </tr>    
</table>

而不是:

<table>
  <tr>
     <td><customtag token="...">label</customtag></td>
  </tr>    
</table>

我们声明自定义标签如下:

CKEDITOR.dtd['customtag'] = CKEDITOR.dtd;
CKEDITOR.dtd.$blockLimit['customtag'] = true;
CKEDITOR.dtd.$inline['customtag'] = true;
CKEDITOR.dtd.$nonEditable['customtag'] = true;
if (parseFloat(CKEDITOR.version) >= 4.1) {
  // Register allowed tag for advanced filtering.
  editor.filter.allow('customtag[!*]', 'customtag', true);
  CKEDITOR.dtd.$object['customtag'] = true;
}

我尝试CKEDITOR.config.extraAllowedContent = 'customtag[*]';代替editor.filter.allow('customtag[!*]', 'customtag', true);并尝试使用允许规则,但没有成功。

表格中也接受了我们错过的自定义标签的内容吗?

1 个答案:

答案 0 :(得分:1)

最后,我想出了它遗漏的内容。

在DTD定义中,我没有定义可以包含自定义标记的HTML标记。

显然,当自定义标记声明为&#34; inline&#34;时,CKEDITOR会自行配置大多数块HTML标记,如&#34; p&#34;或&#34; div&#34;但它不适用于&#34; td&#34;或&#34; li&#34;。

我必须在我的代码中执行以下操作:

CKEDITOR.dtd [&#39; td&#39;] [&#39; customtag&#39;] = 1; CKEDITOR.dtd [&#39; li&#39;] [&#39; customtag&#39;] = 1;

之后,我的标签已被正确考虑。

最后,我的代码如下所示:

   CKEDITOR.dtd['customtag'] = CKEDITOR.dtd;
   CKEDITOR.dtd.$blockLimit['customtag'] = 1;
   CKEDITOR.dtd.$inline['customtag'] = 1;
   CKEDITOR.dtd.$nonEditable['customtag'] = 1;

   CKEDITOR.dtd['td']['customtag'] = 1;
   CKEDITOR.dtd['li']['customtag'] = 1;

   if (parseFloat(CKEDITOR.version) >= 4.1) {
       // Register allowed tag for advanced filtering.
       editor.filter.allow('customtag[!*]', 'customtag', true);
       CKEDITOR.dtd.$object['customtag'] = 1;
   }

你可以注意到,我也用整数改变了布尔值。我这样做只是为了通过我的代码对齐CKEditor为其他HTML标记所做的设置。