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):

慧中标AI标书
慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

下载
// ... (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接口等等。

1047

2023.10.19

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

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

86

2025.10.17

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

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

455

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

3

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

15

2026.01.21

Python多线程合集
Python多线程合集

本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.21

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号