wangEditor4 JSON格式数据内容渲染显示

本文主要是将v4版本中以JSON格式存储的数据,显示到其他区域中。

1. 前言

wangEditor提供了getJSON()方法获取编辑器内容的JSON格式数据,而 v4版本新增了通过JSON设置编辑器默认内容的API,如图:
在这里插入图片描述
从而我们可以将编辑的内容以JSON格式存储在服务端中,便于后期的维护和跟踪。但是在将JSON数据内容进行显示时遇到了麻烦,需要将数据转换成浏览器DOM对象或者html字符串才能加载出来。

一开始想wangEditor可能有提供此类api进行转换,结果没找到。然后想到自己手撸转换方法,太麻烦,而开源第三方转换库(html2json)也不太兼容,需要改源码。最后想到,既然wangEditor能将JSON的数据进行回显,那内部肯定实现了一套转换逻辑,于是便有了本文(解决方法看第三节)。

2. wangEditor 源码剖析

(可跳过)直接从setJSON方法入手。根据editor.txt.setJSON这个引用链,沿着入口,一路找到了text/index.ts文件,找到了setJSON方法,如下图:
在这里插入图片描述
const html = getHtmlByNodeList(nodeList).children() 这一行比较明显,进入方法看到返回的是一个自定义的DomElement,在这里插入图片描述
在这里插入图片描述
很明显,这个elems属性就是原生的HTMLElement(含有innerHTML属性),方法就有了

3. 最终实现方法

import getHtmlByNodeList from 'wangeditor/src/text/getHtmlByNodeList';
import { NodeListType } from 'wangeditor/src/text/getChildrenJSON';
import $, { DomElement } from 'wangeditor/src/utils/dom-core';

export const json2html = (nodeList: NodeListType): string => {
    const node: DomElement = getHtmlByNodeList(nodeList).children();
    if (!node) return '';
    const $textElem = $('<div></div>');
    $textElem.replaceChildAll(node);
    return $textElem.elems[0].innerHTML;
};

这个方法需要依赖wangEditor,如果别的项目没有集成wangEditor,但需要使用此功能,可以将核心代码提取出来封装。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐