当前位置: 首页 > news >正文

tiptap parseHTML renderHTML 使用

要在 Tiptap 中使用 parseHTML 和 renderHTML,可以通过创建自定义扩展来解析和渲染自定义的 HTML 元素。这两个方法允许你定义如何将 HTML 解析为 ProseMirror 文档节点以及如何将 ProseMirror 的文档节点渲染为 HTML。

1. parseHTML

parseHTML 用于将 HTML 元素解析为 ProseMirror 节点。在自定义扩展中,你可以定义如何将特定的 HTML 元素解析为 Tiptap 的文档节点。

2. renderHTML

renderHTML 用于将 ProseMirror 节点渲染回 HTML。你可以在自定义扩展中定义如何将 ProseMirror 节点渲染为 HTML 标签。

以下是一个简单的示例,展示了如何创建一个自定义扩展来解析和渲染一个自定义的 figure 元素:

import { Node, mergeAttributes } from '@tiptap/core';const FigureNode = Node.create({name: 'figure',group: 'block',content: 'inline*',// 使用 parseHTML 解析 HTMLparseHTML() {return [{tag: 'figure',},];},// 使用 renderHTML 渲染回 HTMLrenderHTML({ HTMLAttributes }) {return ['figure', mergeAttributes(HTMLAttributes), 0];},// 定义 ProseMirror schemaaddAttributes() {return {class: {default: null,},};},// 定义编辑器中的样式addNodeView() {return ({ node, HTMLAttributes }) => {const dom = document.createElement('figure');dom.classList.add(node.attrs.class);return {dom,};};},
});export default FigureNode;

要使用这个扩展,需要在 Tiptap 的编辑器配置中注册这个自定义节点:

import { Editor } from '@tiptap/core';
import StarterKit from '@tiptap/starter-kit';
import FigureNode from './FigureNode';const editor = new Editor({element: document.querySelector('#editor'),extensions: [StarterKit,FigureNode,],content: '<p>Hello World!</p>',
});

解析和渲染

  • 解析 HTML:
    当 Tiptap 编辑器加载带有 <figure> 标签的内容时,它会使用 parseHTML 方法来解析它,并将其转换为ProseMirror 的节点。
  • 渲染 HTML:
    当你将 ProseMirror 文档节点导出为 HTML 时,Tiptap 会调用 renderHTML 方法来生成最终的 HTML。

parseHTML 配置说明

parseHTML() {return [{tag: 'figure',},];
}

这里的 tag: ‘figure’ 告诉 Tiptap 当它在编辑器中遇到 <figure> 标签时,应当将其解析为自定义的 ProseMirror 节点。

HTML 内容加载/粘贴: 当你将一段包含 <figure> 标签的 HTML 内容加载到 Tiptap 编辑器中时,Tiptap 的解析器会检查所有的 parseHTML 配置。

匹配标签: 如果在 parseHTML 中找到了与 HTML 内容匹配的标签(如 <figure>),Tiptap 会使用该配置将该 HTML 标签解析为自定义节点(如 FigureNode)。

生成节点: Tiptap 会生成相应的 ProseMirror 节点,这些节点会存储在编辑器的文档结构中,并以内部的方式表示和操作。

例如,假设你在编辑器中粘贴以下 HTML:

<figure class="image"><img src="image.jpg" alt="An image">
</figure>

由于 parseHTML 方法配置了 tag: ‘figure’,Tiptap 会识别 <figure> 标签,并将其解析为相应的 ProseMirror 节点。这意味着在编辑器内部,这段 HTML 会被表示为一个包含 img 的 figure 节点。

高级配置
还可以为 parseHTML 返回的对象添加其他条件,例如根据特定的属性或类名进行匹配:

parseHTML() {return [{tag: 'figure.image',getAttrs: node => node.classList.contains('image') && null,},];
}

在上面的例子中,Tiptap 只会在 <figure> 标签上有 .image 类名时才解析它。

总结

parseHTML 中返回的对象在 HTML 内容解析过程中扮演着识别器的角色,Tiptap 通过这些对象来确定哪些 HTML 标签应该被转换为 ProseMirror 节点。这个过程使得你能够扩展和定制 Tiptap 编辑器,以支持特定的 HTML 结构和标签。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践
  • 安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员
  • 【一文读懂】NTN(非地面网络)技术介绍
  • vulhub GhostScript 沙箱绕过(CVE-2018-16509)
  • JS_循环结构
  • 【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式
  • 归并排序/计数排序
  • Spring Boot之数据访问集成入门
  • 秋招想要过在线测评,这些知识必须刷
  • [SUCTF 2018]annonymous1
  • FFmpeg源码:avcodec_descriptor_get函数分析
  • 三维重建实战:3D Gaussian Splatting
  • 数学建模强化宝典(14)Fisher 最优分割法
  • 鲁棒优化 形象讲解 和库存管理鲁棒优化、生产线调度鲁棒优化、电力市场鲁棒优化、 物流优化鲁棒优化
  • 每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积
  • Android交互
  • javascript面向对象之创建对象
  • magento 货币换算
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • TypeScript迭代器
  • Vue2.x学习三:事件处理生命周期钩子
  • vue总结
  • 实习面试笔记
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • Java性能优化之JVM GC(垃圾回收机制)
  • postgresql行列转换函数
  • 阿里云ACE认证学习知识点梳理
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #if #elif #endif
  • #QT(一种朴素的计算器实现方法)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (day18) leetcode 204.计数质数
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (五)c52学习之旅-静态数码管
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 直连SAP HANA数据库
  • .NET上SQLite的连接
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net实现客户区延伸至至非客户区
  • .NET使用存储过程实现对数据库的增删改查
  • .NET未来路在何方?
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ Linux ] Linux信号概述 信号的产生
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [AWS]CodeCommit的创建与使用