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

CKEditor 5:如何在评论功能中使用Mentions提及功能?

CKEditor 5评论模块集成@提及功能实现方案

核心前置说明

评论模块的输入框是独立于正文主编辑器的单独CKEditor实例,绝大多数集成失败的原因都是只给正文编辑器配置了mentions能力,没有给评论区的编辑器实例传入对应配置。

具体实现步骤

  • 第一步:引入必备插件
    确保项目已经引入Mention插件,该插件是CKEditor 5官方自带的特性包内容,不需要额外安装第三方依赖。
  • 第二步:给评论编辑器实例注入mentions配置
    在主编辑器初始化的配置项中,通过comments.editorConfig字段专门为评论输入区的编辑器传入插件列表和mentions规则,不要只在主编辑器根配置下写mention参数。参考配置代码如下:
    import { Mention } from '@ckeditor/ckeditor5-mention';
    
    ClassicEditor.create(document.querySelector('#editor-container'), {
      // 主编辑器原有配置:插件列表、工具栏、上传配置等
      plugins: [ /* 主编辑器需要的所有插件,包括CommentsRepository等评论相关插件 */ ],
      toolbar: [ /* 主编辑器工具栏配置 */ ],
    
      // 专门针对评论模块编辑器的配置
      comments: {
        editorConfig: {
          // 评论输入框编辑器需要加载的插件,必须包含Mention
          plugins: [ Mention, Bold, Italic, Link ],
          // mentions规则配置
          mention: {
            feeds: [
              {
                marker: '@', // 触发提及的标识字符
                minimumCharacters: 1, // 输入1个字符后开始触发匹配
                // 提及数据源方法,支持同步返回/异步Promise返回,参数是当前输入的关键字
                feed: async (searchText) => {
                  // 这里写自己的用户匹配逻辑,比如拉取用户列表、按关键字过滤
                  // 最终返回格式为包含id、name字段的对象数组即可,比如:
                  // return userList.filter(user => user.name.includes(searchText)).slice(0, 10)
                  return await fetchMatchedUsers(searchText);
                },
                // 自定义下拉候选列表的单项渲染,可选,不配置会用默认纯文本样式
                itemRenderer: (user) => {
                  const itemEl = document.createElement('div');
                  itemEl.className = 'custom-mention-item';
                  itemEl.innerHTML = `<img src="${user.avatar}" class="user-avatar"/><span>${user.name}</span>`;
                  return itemEl;
                }
              }
            ]
          }
        }
      }
    })
    
  • 第三步:配置数据过滤规则
    提及内容插入后会生成带特定属性的span标签:<span class="mention" data-mention-id="{用户ID}" data-mention-name="{用户名}">@用户名</span>,后端存储评论内容、前端回显评论时不要过滤掉这几个自定义属性和类名,否则会导致提及元素失效变成纯文本。

常见问题处理

  • 如果输入@后没有弹出下拉列表:优先检查评论实例的editorConfig里有没有注册Mention插件,有没有正确配置feeds规则,不要把mention配置写在主编辑器根层级。
  • 如果异步拉取用户列表卡顿:建议feed方法每次最多返回10-20条匹配结果,不要返回全量用户数据。
  • 如果需要自定义提及项的展示样式:直接给.mention类编写CSS即可,比如加浅蓝背景、圆角、内边距和普通文本做区分。
  • 实时协作场景下:只要所有端的评论编辑器配置了相同的mention规则,提及数据会跟着评论线程自动同步,不需要额外做数据转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:36:08