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

标签 reactjs slatejs

如何将嵌套的 html 元素反序列化为与 Slate 兼容的 JSON 结构。请提供任何帮助。我已经尝试过 slate-hyperscript 和文档中的 deserialize() 函数,但它不起作用。 这是我的 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);
};

关于reactjs - 在 slatejs 编辑器中反序列化嵌套 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66547489/

相关文章:

javascript - 无法从 React Native 中的父组件调用子组件方法

javascript - NodeWebkit - 部署应用程序

reactjs - 如何更改 Material-UI AppBar 的明暗主题颜色?

javascript - 使用官方示例无法在Slate.js 编辑器中清楚地删除链接

javascript - TypeError : Text. isText 不是函数

reactjs - 使用 redux-persist 和 redux thunk

reactjs - 使用 React 路由器定义传递额外参数

javascript - 如果特定单词出现在编辑器中,则更改它们的颜色

html - Chrome 中内联元素的插入符号位置和选择高度

javascript - 换行符后 getBoundingClientRect 的定位不正确