自 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;
}
}
其他选项也存在:
- 插入后运行自定义清理代码(您将运行您的 DOM 节点上的代码)
- 定义 CKEDITOR.toHtml 事件,但确保您使用的是过滤前的优先级编号。如何在这里找到:http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml
- 定义CKEDITOR.pasteFilter,仅过滤外部粘贴的数据。如何在这里找到:http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-pasteFilter
关于javascript - ckeditor:如何删除其他特定标签内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095580/