Javascript CKEDITOR:文本未突出显示时禁用插件按钮

Javascript CKEDITOR:文本未突出显示时禁用插件按钮,javascript,ckeditor,ckeditor4.x,Javascript,Ckeditor,Ckeditor4.x,我有一个CKEDITOR插件,当编辑器中没有选定副本时,我很难禁用它。现在,用户可以在编辑器中单击按钮,而无需任何突出显示的文本。我想修改它,使插件按钮只有在编辑器中有副本高亮显示时才处于活动状态。我采纳了这个建议,但不起作用 主要插件代码: CKEDITOR.plugins.add('cta'{ 图标:“cta”, init:函数(编辑器){ //function根据编辑器选择(从作用域中选择)设置命令的状态。 函数刷新状态(){ log('refreshtstate'); var edit

我有一个CKEDITOR插件,当编辑器中没有选定副本时,我很难禁用它。现在,用户可以在编辑器中单击按钮,而无需任何突出显示的文本。我想修改它,使插件按钮只有在编辑器中有副本高亮显示时才处于活动状态。我采纳了这个建议,但不起作用

主要插件代码:

CKEDITOR.plugins.add('cta'{
图标:“cta”,
init:函数(编辑器){
//function根据编辑器选择(从作用域中选择)设置命令的状态。
函数刷新状态(){
log('refreshtstate');
var editable=editor.editable(),
//我们想要控制的命令。
command=editor.getCommand('source'),
范围
命令国;
如果(!可编辑){
//可能是editable尚未就绪。
console.log(“可编辑尚未准备就绪”);
返回;
}
//我们假设只有一个范围。
范围=可编辑的.getDocument().getSelection().getRanges()[0];
log(`range:`);
控制台日志(范围);
//我们将为命令设置的状态。
commandState=(range&&!range.collapsed)?CKEDITOR.TRISTATE\u关闭:CKEDITOR.TRISTATE\u禁用;
log('commandState');
console.log(commandState);
command.setState(commandState);
}
//我们将使用节流函数调用,因为此事件可以非常频繁地触发。
var throttledFunction=CKEDITOR.tools.eventsBuffer(250,刷新状态);
//现在,这是检测所有选择更改的事件。
on('selectionCheck',throttledFunction.input);
//您很可能还希望在编辑器准备就绪后立即执行此函数。
编辑器.on('instancerady',函数(evt){
//在InstanceRady上也进行状态刷新。
刷新状态();
});
editor.addCommand('ctabtn',new-CKEDITOR.dialogCommand('ctaDialog');
editor.ui.addButton('cta'{
标签:“插入行动调用按钮”,
命令:“ctabtn”,
工具栏:“插入”
});
CKEDITOR.dialog.add('ctadiol',this.path+'dialogs/cta.js');
}

});如上所述,建议的处理方法对我不起作用。如果在编辑器中进行选择,则使用range.collapsed返回真值。有了这些,我转而使用Jquery来处理其余的问题

//哈奇。但它完成了任务。
//a.cke_按钮.cke_按钮\uuuu cta.cke_按钮\uu关闭是“我的工具栏”按钮的选择器。
//列出的onclick函数是从查看CKeditor函数中提取出来的
//启动我的插件。
//需要将“onclick”属性设置为null,以覆盖模式onclick
//没有选择时绑定。
范围=可编辑的.getDocument().getSelection().getRanges()[0];
如果(range.collapsed==false){
$('a.cke_button.cke_button_cta.cke_button_off').attr(“onclick”、'CKEDITOR.tools.callFunction(83,this);返回false;');
$('a.cke_button_cta')。toggleClass('cta_button_disabled');
}否则{
$('a.cke_button.cke_button_cta.cke_button_off').prop(“onclick”,null);
}