javascript - ckeditor:如何删除其他特定标签内的标签

标签 javascript ckeditor

自 1 1/2 天以来,我一直在搜索 ckeditor 的整个文档,但找不到解决方案。

到目前为止,我已经根据我的要求配置了 ckeditor,并且 ACF(高级内容过滤器)也正在工作。

我现在的问题是: 如果我从外部源插入,例如这个:

<table style="padding-left: 0px;">
<tr style="vertical-align: top;">
    <td style="text-align: left;" width="179">
        <p style="padding-bottom: 0px;">Gewicht Brutto</p>
    </td>
</tr>
</table>

ckeditor 过滤掉所有属性(这完全没问题)并给我这个:

<table>
<tr>
    <td>
        <p>Gewicht Brutto</p>
    </td>
</tr>
</table>

但我找不到删除 <p> 的方法-标签,如果 - 并且如果它位于 <td> 内(我不想删除所有 <p> ,我也可以使用“在输入时插入 <p>”)

与所有ACF-configurations-stuff我只能定义允许或禁止哪些标签,或者可以使用哪些属性。

有谁知道是否有办法删除特定父元素中不需要的元素?

非常感谢! 马丁

最佳答案

答案:

您可以使用“match”属性(如果您将规则定义为对象),将其定义在 disallowedContent 中。这意味着,每当匹配函数规则返回 true 时,这些元素就会被过滤掉。

示例:

它从 td 元素中删除所有 br 元素(将父元素作为 td 元素)。您应该注意,在这种情况下,element 参数尚未附加到 DOM,因此它只是一个 htmlParser.element。

'br' : {
         match: function( element ) {
            var aParent = element.getAncestor(),
                aParentTagName = aParent.name;

            if( typeof aParentTagName === 'string' &&
                  aParentTagName.toUpperCase() == 'TD' ) {
                   return true;
            }

            return false;
         }
       }

其他选项也存在:

  1. 插入后运行自定义清理代码(您将运行您的 DOM 节点上的代码)
  2. 定义 CKEDITOR.toHtml 事件,但确保您使用的是过滤前的优先级编号。如何在这里找到:http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml
  3. 定义CKEDITOR.pasteFilter,仅过滤外部粘贴的数据。如何在这里找到:http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-pasteFilter

关于javascript - ckeditor:如何删除其他特定标签内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095580/

相关文章:

javascript - 带有 asp.net 的 jQuery UI 对话框 - 对象不支持属性或方法 'dialog'

javascript - JSON 与序列化有何关系?

javascript - 如何禁用 CKEditor 上下文菜单?

javascript - CKEditor - 不在帖子中提交数据

javascript - 输入文本处于焦点时如何显示父表单?

javascript - str replace 在没有收到正确数量的参数时表现得很有趣

javascript - 如何使用 ID/ key (使用 React)从 Firebase 检索和呈现数据?

javascript - 债权人 - 将外部样式表应用于 CKEditor textarea 中的内部文本

jquery - ckeditor 和粘贴文本事件

html - CKEditor 样式列表样式