tinyMCE 4:将 Class 添加到所选元素

tinyMCE 4: add Class to selected Element

我创建了一个 tinymce 菜单项,我想要它做的是向选定的文本元素添加一个 class。我似乎无法弄清楚如何做到这一点。有什么建议么? 添加我的菜单项如下所示:

tinymce.PluginManager.add('button', function(editor, url) {
    editor.addMenuItem('button', {
        icon: '',
        text: 'Button',
        onclick: function() {

            tinyMCE.activeEditor.dom.addClass(tinyMCE.activeEditor.selection, 'test'); //not working
        },
        context: 'insert',
        prependToContext: true
    });
});

如果有任何有用的提示,我将不胜感激。

为了能够将 class 添加到编辑器中,您需要在编辑器中添加一个 dom 元素以将 class 添加到其中。文本节点可能不包含 class。 因此,我建议您插入一个 span 元素,其中 class 您想要添加的环绕实际选择。请注意,如果选择跨越段落边界,这将不起作用(在这种情况下,您将需要更复杂的代码)。试试这个:

onclick: function() {
    var ed = tinyMCE.activeEditor;
    var content = ed.selection.getContent({'format':'html'});
    var new_selection_content = '<span class="test">' + content + '</span>';
    ed.execCommand('insertHTML', false, new_selection_content);
},

我找到了一个可能不完美的解决方案(例如,如果您 select 文本的一部分,那么这不会像我希望的那样工作),但现在它可以满足我的要求:

tinyMCE.activeEditor.dom.addClass(tinyMCE.activeEditor.selection.getNode(), 'test');

例如,如果我在 link 上执行此操作,脚本会将类名 "test" 添加到我的标签中。

这对我有用:

setup: function(editor) {
  editor.ui.registry.addButton("addClassBtn", {
    icon: "insertdatetime",
    text: "Highlight ",
    onAction: function (_) {
      var newContent = "<span class='test'>" + editor.selection.getContent() + "</span>";
      editor.selection.setContent(newContent);

    }
  }
}