首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在slatejs编辑器中反序列化嵌套的html

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

Stack Overflow用户
提问于 2021-03-09 21:06:59
回答 1查看 404关注 0票数 0

如何将嵌套的html元素反序列化为与Slate兼容的JSON结构。有什么需要帮忙的吗?我已经用文档中的反序列化()函数尝试了slate-hyperscript,但它不起作用。下面是我的示例html

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2021-05-06 20:41:55

以下是我的解决方案:

代码语言:javascript
复制
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);
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66547489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档