惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
博客园_首页
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
B
Blog
D
DataBreaches.Net
腾讯CDC
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
月光博客
月光博客
V
V2EX
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
博客园 - 叶小钗
Y
Y Combinator Blog

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 新电脑 brew install node 之后,一个小设置可以提升对供应链投毒的防御 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用? 做了个 AI + 真人专家监督的广告投放平台 Auxora, 7 个品牌跑出 6x ROAS
富文本编辑器我来啦🥹(鼻青脸肿 ing)
llej · 2026-03-19 · via V2EX

我最近做了一个开源富文本编辑器: https://github.com/2234839/range-warp

image

以前看到为什么都说富文本编辑器是天坑?这个问题还以为和我没什么关系,结果现在就开始踩坑了🤣


为什么做

先说一下为什么已经有了这么多成熟的产品我还在自己做吧

首先我的场景是要给老的富文本编辑器添加书签和修订功能,但老项目已经有点克苏鲁(混沌化)了而且直接替换成其他编辑器显然也不具备可行性,没有足够的时间来做这件事情,所以我想自己做一层适配层来隔绝老代码的精神污染

怎么做

本来只是想要做一个适配层:就是为老富文本编辑器添加各种自定义容器(书签,修订)功能

结果经过研究发现只要实现通过下标选中任意一段文本可以为他添加某容器包裹或者移除某容器包裹居然就可以实现一个基本完备的富文本编辑器了!

于是这个适配层本身也能是一个富文本编辑器,还可以叠加在任何以 contenteditor 为基础实现的富文本系统上,我测试了一下叠加在 ueditor plus 上基本也没啥毛病,,叠加一层中间层果然能解决任何问题😂

但是

这里的细节太多了,太折磨人了,下面是我遇到的一部分问题的思考,还有更多的细节在代码里以及肯定还有好多我没考虑的(从右到左的文字啥的从来就不打算处理,我的场景用不到)

富文本包裹容器问题:所有加粗,高亮等样式效果都可以视为一个包裹容器,所以应用样式和取消样式就是计算包裹容器的范围应该如何处理。

现在有一个问题:跨段落的容器包裹如何处理?

1. 单容器元素包裹:直接创建一个元素将内容包裹进去
2. 分段包裹:为每个段落中的部分创建一个内联容器

   1. 这种方法就失去了包裹语义:考虑如果容器间被插入了容器,显然新容器无法被包裹,但是对于加粗高亮等容器而言这是可接受的

      1. 这是大部分编辑器的做法,解决插入问题他们依赖自定义数据模型和强控制用户输入的方案
   2. 为所有容器分配相同的 id ,来表示他们是一个组,并且这些元素本身可以视为锚点

      1. 剪贴板清洗( html 规范化):hack 剪切和复制功能,避免剪切锚点粘贴到其他地方导致包裹范围出现变化,也就是容器注册时应该要注册一下他是否可以被复制(注意不是禁止复制,是复制后的剪贴板中有文本,有 html (这个 html 没有禁止复制的容器,但容器内的其他容器的 html 是可以存在的))
3. 锚点虚拟容器包裹,通过两个锚点来确定一个范围,这样可以解决 2 的问题

   1. 锚点元素被剪切或者复制粘贴了怎么办?