如何在 Quill 编辑器中向内容添加不可编辑标签

2024-01-06

我想添加一些预建标签,例如

<div class="label"> Label Text <span>x</span><div>

到鹅毛笔编辑器中的 html 内容。添加这样的标签本身应该不是问题。但是我不希望用户能够编辑标签内的文本。甚至不应该允许将光标放置在标签内。全部删除时div应该删除。从某种意义上说,整个标签应该像一个图像。 是否可以 ?


您应该能够通过编写自己的代码来实现这一目标Blot https://github.com/quilljs/parchment/#blots:

class Label extends Parchment.Embed {
  static create(value) {
    const node = super.create(value);
    node.innerText = value;
    // Remember to set this so users can't edit
    // the label's content
    node.contentEditable = 'false';
    this._addRemovalButton(node);
    return node;
  }

  static value(node) {
    // Only return the text of the first child
    // node (ie the text node), otherwise the
    // value includes the contents of the button
    return node.childNodes[0].textContent;
  }

  static _addRemovalButton(node) {
    const button = document.createElement('button');
    button.innerText = 'x';
    button.onclick = () => node.remove();
    button.contentEditable = 'false';
    node.appendChild(button);

    // Extra span forces the cursor to the end of
    // the label, otherwise it appears inside the
    // removal button
    const span = document.createElement('span');
    span.innerText = ' ';
    node.appendChild(span);
  }
}
Label.blotName = 'label';
Label.tagName = 'SPAN';
Label.className = 'ql-label';

You register https://github.com/quilljs/parchment/#registry它与鹅毛笔:

Quill.register(Label);

最后,您可以以类似于image或其他embeds https://quilljs.com/docs/formats/#embeds:

quill.updateContents(
  new Delta().insert({ label: 'foo' })
);

注意:您需要的任何样式都可以应用.ql-label class:

.ql-label {
  background-color: lightgrey;
  padding: 0.3em;
  margin: 0 0.2em;
}

.ql-label button {
  margin-left: 0.3em;
}

最后最后:a工作示例 https://codepen.io/alecgibson/pen/EJWEoV.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Quill 编辑器中向内容添加不可编辑标签 的相关文章

随机推荐

  • SpriteKit 侧向滚动不会更新物理世界

    遵循示例here https stackoverflow com questions 24748247 define map bounds and center on player node 24843989 24843989 除了 Obj
  • 在 React 中定义空 dom 元素的正确方法

    我发送一个可选参数checkbox在组件的 prop 内 var checkBox this props checkbox span span null 然后我这样说 div checkBox div 从上面可以看出 我将 null 分配给
  • Android - 通过彩信发送音频文件

    我使用以下代码通过电子邮件 dropbox 发送音频文件 这并没有让我选择通过彩信发送相同的文件 有人知道如何将其附加到彩信并让用户根据需要发送吗 Intent share new Intent Intent ACTION SEND sha
  • npm rollbackFailed安装任何包时出现可选错误

    我在安装任何一个时遇到问题npm包 这是我的错误 rollbackFailedOptional verb npm session xxxxxxxxxxx 为了解决这个问题 我做了一些事情 但仍然遇到同样的错误 I put registry
  • Resources.getSystem() 与 getResources()

    我是 Android 新手 我正在通过网络上的可用资源自己学习 SDK 我现在遇到一个情况 我正在尝试以下代码 Type 1 getResources getString android R string cancel Type 2 Res
  • 在.NET中实现以数据库为存储介质的日志库

    我刚刚开始开发一个日志库 每个人都可以使用它来在用户运行我们的应用程序时跟踪任何类型的系统信息 到目前为止最简单的示例是跟踪信息 警告和错误 我希望所有插件都能够使用此功能 但由于每个开发人员可能对报告的重要内容有不同的想法 因此我希望尽可
  • 使用蒙特卡罗模拟计算方差的期望值

    所以我有这个概率分布 X 0 概率 7 8 1 60 概率 1 8 詹姆斯他的车一年坏N次 其中N Pois 2 X是修理费用 Y是詹姆斯一年内造成的总费用 我想计算 E Y 和 V Y 这应该给我 E X 15 和 V Y 1800 我有
  • 如何使用react-apollo 使用同一查询进行多个graphql 查询?

    我有一个 graphql 端点 QueryDataForOptions 我想根据组件的多次调用它options支柱 可能有任意数量的选项 我想做这样的伪代码 但钩子规则不允许这样做 const MyComponent options gt
  • zipArchive 在 iOS 上解压到文档文件夹

    我正在使用 ZipArchive 进行解压 但它将 zip 的内容解压到以 zip 文件命名的文档子目录中 而不是直接解压到我的文档文件夹中 有谁知道我可以更改什么以确保其保存到我想要的目录 void unZipUpdateArchiveA
  • Vue JS 返回 [__ob__: Observer] 数据而不是我的对象数组

    我创建了一个页面 我想通过 API 调用从数据库获取所有数据 但我对 VueJS 和 Javascript 也有点陌生 我不知道哪里出错了 我用 Postman 测试了它 并得到了正确的 JSON 这就是我得到的 ob Observer l
  • 检测另一个子视图之上的一个子视图

    我试图在将一个子视图拖动到另一个子视图顶部时检测它是否发生碰撞 有什么好的方法可以做到这一点 我正在使用 UIPanGestureRecognizer 来拖动元素 谢谢 您可以使用CGRectIntersectsRect 为了完成任务 if
  • 使用 LINQ 仅基于单个对象属性来获取两个对象列表之间的差异[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 狗类有两个属性 名称和颜色 假设我有两个 IEnumerable 列表 List1 name Sam color Faw
  • 使用 Laravel Homestead 将 Vagrant 端口转发 80 到 8000

    我的问题 我只能通过端口 8000 访问我的网站 但不能通过 80 这让我认为它没有像它所说的那样将 80 重定向到 8000 我想简单地在浏览器中输入 local kujif com 它就会加载该网站 我读到的默认端口是 80 端口 我正
  • 如何确定 Android 版本的修订号?

    我知道如何获取 API 级别 android os Build VERSION SDK INT 但每个级别版本也有几个修订版本 例如2 1 有版本 1 和版本 2 如何确定版本的版本 我想知道这一点的原因是我有一个针对 Android 2
  • Javascript ES6 从 URL 获取 JSON(无 jQuery)

    我想知道是否有任何 ES6 方法可以从 url 获取 json 或其他数据 jQuery GET 和 Ajax 调用非常常见 但我不想在本次调用中使用 jQuery 典型的调用如下所示 var root http jsonplacehold
  • 根据特定时间段内的事件日期创建虚拟变量

    我有一个数据集products像这样 gt head featured products Dept Class Sku Description Code Vehicle Placement StartDate EndDate Comment
  • AutoMapper - 为什么它会覆盖整个对象? [复制]

    这个问题在这里已经有答案了 我不明白为什么它会覆盖我的整个对象 原因是我得到了我的User来自 db 的对象我想从 DTO 分配新值 它不是仅仅添加这些新值 而是创建具有新值的新对象 但所有先前的值都设置为null 我怎样才能确保在这种情况
  • 在包“<默认包>”中找到 0 个测试类

    我最近安装了 IntelliJ IDEA 13 1 4 和 jRebel 插件 我已获得许可并在中创建并添加了配置catalina bat file 从 IntelliJ 中运行 jRebel 时 它似乎正在监视正确的目录 但我收到以下消息
  • 如何对 Azure CLI 使用 Powershell splatting

    我想用Powershell 泼溅 https learn microsoft com en us powershell module microsoft powershell core about about splatting view
  • 如何在 Quill 编辑器中向内容添加不可编辑标签

    我想添加一些预建标签 例如 div class label Label Text span x span div 到鹅毛笔编辑器中的 html 内容 添加这样的标签本身应该不是问题 但是我不希望用户能够编辑标签内的文本 甚至不应该允许将光标