微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 slatejs 编辑器中反序列化嵌套的 html

如何解决在 slatejs 编辑器中反序列化嵌套的 html

如何将嵌套的 html 元素反序列化为与 Slate 兼容的 JSON 结构。请任何帮助。我已经尝试过使用文档中的 deserialize() 函数使用 slate-hyperscript 但它不起作用。 这是我拥有的示例 html

<p><u><em><strong>Our S</strong></em></u><strong>ervi</strong><u><em><strong>ce</strong></em></u><em><strong>s </strong></em><em>A</em><u><em>nd</em></u><u><em><strong> </strong></em></u>Mo<u><em><strong>re</strong></em></u></p>

解决方法

这是我的解决方案:

import { jsx } from 'slate-hyperscript';

const deserialize = el => {
  if (el.nodeType === 3) {
    return el.textContent;
  }
  if (el.nodeType !== 1) {
    return null;
  }

  let children = Array.from(el.childNodes).map(deserialize);

  if (children.length === 0) {
    children = [{ text: '' }];
  }

  switch (el.nodeName) {
    // Elements:
    case 'BODY':
      return jsx('fragment',{},children);
    case 'P':
      return jsx('element',{ type: paragraph },children);
    case 'H1':
      return jsx('element',{ type: heading-one },children);
    case 'H2':
      return jsx('element',{ type: heading-two },children);

    // Leafs:
    case 'STRONG':
      return { text: el.textContent,bold: true };
    case 'EM':
      return { text: el.textContent,italic: true };
    case 'U':
      return { text: el.textContent,underline: true };

    default:
      return el.textContent;
  }
};

const deserializeFromHtml = html => {
  const document = new window.DOMParser().parseFromString(html,'text/html');
  return deserialize(document.body);
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。