You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinyMCE 4:如何通过下拉菜单在光标处插入文本片段?

实现TinyMCE 4轻量自定义文本下拉菜单

完全懂你的需求!Template插件确实有点冗余,咱们直接用TinyMCE原生的API就能实现一个简洁的下拉菜单,不管是放在工具栏还是顶部菜单里都可以,没有多余的弹窗或预览功能,完全贴合你的要求。

一、工具栏下拉按钮实现

这种方式会在工具栏生成一个带下拉列表的按钮,选中选项后直接插入文本到光标位置:

tinymce.init({
  selector: '#your-textarea-id',
  // 把自定义按钮加入工具栏
  toolbar: 'customTextDropdown',
  setup: function(editor) {
    // 注册自定义下拉按钮
    editor.ui.addButton('customTextDropdown', {
      text: '插入预设文本', // 工具栏按钮显示的文字
      type: 'listbox', // 指定类型为下拉列表
      // 下拉选项:text是显示文字,value是要插入的内容(支持HTML格式)
      values: [
        { text: '问候语', value: '你好!欢迎使用本编辑器😊' },
        { text: '提示文本', value: '<strong>注意:</strong>请填写真实有效的信息' },
        { text: '签名', value: '---<br>技术支持团队' }
      ],
      // 选中选项时触发的事件
      onselect: function() {
        // 将选中的内容插入到光标位置
        editor.insertContent(this.value());
      }
    });
  }
});

说明:

  • values数组可以根据你的需求自由扩展,value字段支持HTML格式,能插入带样式的内容
  • 如果预设内容很多,可以把values抽成单独的变量,方便后期维护
  • 完全不需要依赖任何额外插件,原生API就能实现

二、顶部菜单选项实现

如果想把这个功能加到编辑器顶部的菜单(比如“插入”菜单)里,也很简单:

tinymce.init({
  selector: '#your-textarea-id',
  setup: function(editor) {
    // 注册一个自定义子菜单
    editor.addMenuItem('customTextMenu', {
      text: '插入预设文本', // 菜单显示的名称
      // 子菜单选项
      menu: [
        {
          text: '问候语',
          onclick: function() {
            editor.insertContent('你好!欢迎使用本编辑器😊');
          }
        },
        {
          text: '提示文本',
          onclick: function() {
            editor.insertContent('<strong>注意:</strong>请填写真实有效的信息');
          }
        },
        {
          text: '签名',
          onclick: function() {
            editor.insertContent('---<br>技术支持团队');
          }
        }
      ]
    });

    // 将自定义子菜单加入到默认的「插入」菜单中
    editor.addMenuItem('insert', {
      menu: 'customTextMenu'
    });
  }
});

小技巧:

如果需要动态加载下拉选项(比如从后端获取预设文本),可以在setup函数里通过异步请求拿到数据后,再更新下拉按钮的values或者菜单的子项,比如:

// 示例:异步加载选项
fetch('/api/get-presets')
  .then(res => res.json())
  .then(presets => {
    const menuItems = presets.map(item => ({
      text: item.name,
      onclick: () => editor.insertContent(item.content)
    }));
    // 更新菜单
    editor.menuItems['customTextMenu'].menu = menuItems;
  });

内容的提问来源于stack exchange,提问作者s427

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:45:11