/** * @description parse elem html * @author wangfupeng */ import { DOMElement } from '../utils/dom' import { IDomEditor, SlateDescendant, SlateElement } from '@wangeditor/editor' import { MentionElement } from './custom-types' function parseHtml( elem: DOMElement, children: SlateDescendant[], editor: IDomEditor ): SlateElement { // elem HTML 结构 @张三 const value = elem.getAttribute('data-value') || '' const rawInfo = decodeURIComponent(elem.getAttribute('data-info') || '') let info: any try { info = JSON.parse(rawInfo) } catch (ex) { info = rawInfo } return { type: 'mention', value, info, children: [{ text: '' }], // void node 必须有一个空白 text } as MentionElement } const parseHtmlConf = { selector: 'span[data-w-e-type="mention"]', parseElemHtml: parseHtml, } export default parseHtmlConf