0

0

在Quill编辑器中如何处理文本标注的嵌套问题?

聖光之護

聖光之護

发布时间:2025-03-17 08:44:27

|

1094人浏览过

|

来源于php中文网

原创

quill编辑器嵌套文本标注解决方案:解决重叠标注失效问题

在Quill编辑器中如何处理文本标注的嵌套问题?

本文探讨在Quill编辑器(版本1.3.7)中处理嵌套文本标注的方案,尤其针对接口返回数据中存在重叠标注范围的情况,导致标注失效的问题。

问题描述:

当Quill编辑器接收包含重叠startend值的文本标注数据时,标注功能失效。

示例数据:

Quill文本内容:"输出支部盟员担任省人大常委人"

接口返回数据:

const response = {
    "errorwordlist": [
        {
            "start": 9,
            "end": 13,
            "replacetext": "人大常委会/人大常委会委员/人大常委会组成人员(请根据实际情况选择)",
            // ... other properties
        },
        {
            "start": 8,
            "end": 13,
            "replacetext": "省人大常委会",
            // ... other properties
        }
    ],
    // ... other properties
};

原始代码(存在问题):

使用updateContents方法进行标注:

response.errorwordlist.forEach(item => {
    let length = item.end - item.start;
    if (length > 0) {
        this.editor.updateContents([
            { retain: item.start },
            { retain: length, attributes: { click: item } },
        ]);
    }
});

自定义Blot (click):

MCP官网
MCP官网

Model Context Protocol(模型上下文协议)

下载
// ... (Blot代码,略) ...

解决方案:

核心思路是:1. 对标注数据进行排序和合并;2. 修改updateContents逻辑,处理排序后的数据;3. (可选) 优化自定义Blot,使其能更好地处理嵌套结构。

  1. 数据预处理:

首先,对response.errorwordliststart值进行升序排序。然后,合并重叠的标注。合并策略:如果一个标注完全包含在另一个标注内,则忽略被包含的标注;如果两个标注部分重叠,则合并成一个新的标注,新的start值为较小的start值,新的end值为较大的end值。

function mergeOverlappingAnnotations(annotations) {
    annotations.sort((a, b) => a.start - b.start);
    let mergedAnnotations = [];
    let currentAnnotation = annotations[0];
    for (let i = 1; i < annotations.length; i++) {
        let nextAnnotation = annotations[i];
        if (nextAnnotation.start <= currentAnnotation.end) {
            currentAnnotation.end = Math.max(currentAnnotation.end, nextAnnotation.end);
        } else {
            mergedAnnotations.push(currentAnnotation);
            currentAnnotation = nextAnnotation;
        }
    }
    mergedAnnotations.push(currentAnnotation);
    return mergedAnnotations;
}

let mergedAnnotations = mergeOverlappingAnnotations(response.errorwordlist);
  1. 修改updateContents逻辑:

使用排序后的数据,依次应用标注:

mergedAnnotations.forEach(item => {
    let length = item.end - item.start;
    if (length > 0) {
        this.editor.updateContents([
            { retain: item.start },
            { retain: length, attributes: { click: item } },
        ]);
    }
});
  1. (可选) 优化自定义Blot:

如果需要更精细的嵌套控制,可以修改自定义Blot的create方法,使其能够处理嵌套属性,例如,在Blot中递归处理嵌套的标注信息。

最终效果:

通过以上步骤,Quill编辑器能够正确处理重叠的文本标注,呈现预期的嵌套标注效果。 需要注意的是,复杂的嵌套标注可能需要更复杂的Blot设计和数据处理逻辑。 确保你的自定义Blot能够正确地渲染和处理嵌套的属性。

请注意,代码片段中省略了一些细节,例如错误处理和自定义Blot的完整实现。 你需要根据你的实际情况补充完整代码。 这个解决方案提供了一个处理重叠标注的总体思路和关键步骤。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

989

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

50

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2025.12.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

41

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

3

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号