我需要完全禁用CKEditor(4.2或4.3)中有序和无序列表(<ul>
,<ol>
)的缩进,因为我需要将(非常有限的子集)HTML转换为另一种不支持缩进的标记语言。
我尝试了几种方法,但没有运气:
尝试1:通过配置删除插件
config.removePlugins = 'indent,indentlist,indentblock';
我认为这不起作用,因为这些插件似乎是必需的 - 在从网站构建CKEditor包时无法删除它们。
通过FireBug控制台查看CKEDITOR.plugins
时,这些插件仍然存在。甚至还没有一个自己的插件文件夹 - 似乎它们内置于核心。
尝试2:覆盖TAB键
我创建了一个新的插件disableTab
,它完全不执行任何操作(执行时除了return true;
)。
该插件被注册为TAB键击键的处理程序:
config.keystrokes = [
[ 9, 'disableTab' ] // disable TAB key to avoid nesting!
];
不幸的是,当按下列表的第一级(<li>
或<ol>
)上的选项卡时,插件不起作用。有趣的是,它在列表的第二级(ol > li > ol > li
)中按TAB时有效,它不会在第二级下面生成更多的嵌套列表。我知道我的插件已经执行了,因为我在我的插件中插入了alert()
进行测试。至少,这是我的Firefox中发生的事情。
但我需要完全禁用缩进,不仅仅是在级别之上&gt; 2。
尝试3:在编辑器配置中通过blockedKeystrokes
阻止击键:
不起作用,即使它应该根据文档:
config.blockedKeystrokes = [ 9 ];
尝试4:在运行时删除击键
根据API文档,此代码应禁用击键,但由于某些原因它不起作用:
for (instance in CKEDITOR.instances) {
var editor = CKEDITOR.instances[instance];
editor.setKeystroke(9, false);
}
知道如何删除CKEditor中列表的缩进?
我不明白为什么这些方法都不起作用。如果你知道原因,请告诉我。
更新
有趣的是,除了按下TAB键之外,这段代码几乎每个关键事件都会让我满意:
editor.on('key', function(e) { alert ("hi"); return false; });
所以看起来我的设置(LinuxMint 13 [Gnome 2] + Firefox 18 + CKEditor 4.2)不会触发TAB键的键事件处理程序。也许缩进插件使用其他一些事件?模糊?
更新2:
这是一个Firefox(可能只是linux)问题。有几种方法适用于Chrome或Internet Explorer。
答案 0 :(得分:3)
我刚刚快速查看了,indentlist
插件需要list
,如果您:
0)从http://github.com/ckeditor/ckeditor-dev
下载CKEditor来源1)删除
requires: 'indentlist',
来自plugins/list/plugin.js
2)删除
indentlist: 1,
indentblock: 1,
来自dev/builder/build-config.js
3)使用dev/builder/build.sh
构建发布包(在Windows上使用“Git Bash”shell)
您将在dev/builder/release/ckeditor
文件夹中找到所需的发布版本。
(实际上并不需要一个必需的插件,这是不常见的,但是对于列表不需要缩进也不常见;-))
答案 1 :(得分:1)
尝试将代码更改为:
editor = CKEDITOR.replace( 'element_name' );
editor.on('key', function(e) {
var key = e.data.keyCode;
if(key==9) {
return false;
}
应该可行,只需将'element_name'更改为您要用ckeditor替换的textarea
答案 2 :(得分:1)
内置的indentlist插件在处理事件时会取消事件冒泡,因此不会触发Tab键的标准事件侦听器。如果您将事件优先安排为首先运行,则可以捕获Tab键事件并阻止其缩进列表。
例如:
editor.on('key', function (evt) {
if (editor.mode != 'wysiwyg') {
return false;
}
if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9) {
evt.cancel();
return false;
}
}, null, null, 1);
如果只想限制编号列表上的缩进,可以添加以下条件:
editor.on('key', function (evt) {
var path = editor.elementPath();
if (editor.mode != 'wysiwyg') {
return false;
}
if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9 && path.contains('ol')) {
evt.cancel();
return false;
}
}, null, null, 1);
事件优先级在此处的文档中概述:https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_event.html#method-on