在Tinymce中运行当前命令之前,运行命令标识符RemoveFormat

时间:2019-04-01 19:15:21

标签: javascript php tinymce

我有一些自定义样式格式设置,可以将一个类添加到所选文本。如果用户选择新的格式/类,我有一个要求清除格式/类的请求。他们不需要分配多个类。理想情况下,我不必为tinymce修改任何核心文件,但在必要时愿意这样做。

我的思维过程是捕捉格式的选择,然后运行RemoveFormat,但似乎它将首先运行初始命令。它将格式化,然后删除格式。我想知道是否有一种方法来保存初始请求并先运行RemoveFormat,然后设置新的格式。同样,如果有更好的方法可以做到这一点,我也愿意接受。我使用的是4.7版。

 ed.on('ExecCommand', function checkListNodes (evt) {
   let cmd = evt.command
   if (cmd === 'mceToggleFormat') {
      this.execCommand('RemoveFormat', false, '');
   }
}

预先感谢

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案。有点笨拙,但可以完成工作。我在tinymce init语句之前设置了变量。因此,它将运行格式化,然后清除所选内容的所有格式并发送最初选择的选项。清除格式后,它将再次运行格式,但是这次不会通过检查已切换为true的变量来删除格式。

let doNotRemoveFormat = false;

setup: function (ed) {
  ed.on('ExecCommand', function checkListNodes (evt) {
if (cmd === 'mceToggleFormat') {
    if(!doNotRemoveFormat) {  
      let val = 'runThis|' + evt.value;
      this.execCommand('RemoveFormat', false, val);
    } else {
      doNotRemoveFormat = false;
    }
} else if (cmd === 'RemoveFormat') {
  let value = evt.value.split("|");
  if(value[0] === 'runThis') {
    doNotRemoveFormat = true;
    this.execCommand('mceToggleFormat', false, value[1])
  }
});