var currentDialog = CKEDITOR.dialog.getCurrent();
currentDialog._.editor.insertHtml("<customTag myAttr='var'></customTag>");
引发错误TypeError: Cannot read property 'isBlock' of undefined
如果我尝试.insertHtml("<span>hello</span>")
,它就可以了。
如何更改ckeditor以允许我通过.insertHtml()
指定我自己的自定义html标记?我喜欢把它改成类似<span class='custom'...
之类的东西,但是我不得不处理遗留的CMS文章。使用最新的ckeditor。感谢。
答案 0 :(得分:5)
您需要修改CKEDITOR.dtd
对象,以便编辑器知道此标记并正确解析HTML并处理DOM:
CKEDITOR.dtd.customtag = { em:1 }; // List of tag names it can contain.
CKEDITOR.dtd.$block.customtag = 1; // Choose $block or $inline.
CKEDITOR.dtd.body.customtag = 1; // Body may contain customtag.
您需要在Advanced Content Filter中允许此标记及其样式/ attrs /类:
editor.filter.allow( 'customtag[myattr]', 'myfeature' );
不幸的是,由于某些缓存,在某些情况下,您无法在加载CKEditor后修改DTD对象 - 您需要在创建它时对其进行修改。所以要做到这一点:
修改core/dtd.js代码。
按照README.md
中的说明构建缩小的包 - 唯一的要求是Java(抱歉 - Google Closure Compiler:P)和Bash。
PS。插入未知元素时不应抛出该错误,因此我报告了http://dev.ckeditor.com/ticket/10339并解决了这一不便http://dev.ckeditor.com/ticket/10340。
答案 1 :(得分:0)
我使用createFromHtml()和insertElement()
的组合解决了这个问题CKEDITOR.replace('summary', { ... });
var editor = CKEDITOR.instances.summary;
editor.on('key', function(ev) {
if (ev.data.keyCode == 9) { // TAB
var tabHtml = '<span style="white-space:pre">	</span>';
var tabElement = CKEDITOR.dom.element.createFromHtml(tabHtml, editor.document);
editor.insertElement(tabElement);
}
}