使用 html-react-parser 解析 HTML5 <video> 元素

Parsing HTML5 <video> element with html-react-parser

提问人:Birdzai 提问时间:10/21/2023 最后编辑:Birdzai 更新时间:10/23/2023 访问量:35

问:

我有一些从 CMS 返回的 HTML 内容,我希望在 NextJS V13 应用程序中显示这些内容。我正在使用该包而不是解析 HTML 内容,因为我还希望替换一些嵌入的标签,例如 ,并分别使用相应的 React 组件、Cloudinary 和自定义 React 组件。html-react-parserdangerouslySetHtml<a><img><video><Link><CldImage><VideoPlayer>

和元素替换工作正常,但是我无法弄清楚如何从中提取“src”属性以将其传递给组件。<a><img><video>domNode<VideoPlayer>

例如,我的代码类似于以下内容:

import parse, { Element, HTMLReactParserOptions } from "html-react-parser"
import VideoPlayer from "@/components/video-player"

export default function ArticleContent({ content }: { content: string }) {
  const parserOptions: HTMLReactParserOptions = {
    replace: (domNode) => {
      // Replace embedded <video> tags with <VideoPlayer>
      if (domNode instanceof Element && domNode.name === "video") {
         return <VideoPlayer src={domNode.<???? WHAT GOES HERE ???>} />
      }
    }
  } 

  return (
    <div>
      {parse(content, parserOptions)}
    </div>
  )
}

在其中找到“src”属性的路径一直具有挑战性。有人有什么建议吗?<video>domNode

打字稿 dom 下一个 .js

评论


答:

0赞 Birdzai 10/22/2023 #1

我想通了。我的替换条件应如下所示:

if (domNode instanceof Element && domNode.name === "video") {
  // TODO: Figure out correct type assertions so typesript doesn't complain
  // @ts-ignore
  return <VideoPlayer src={domNode.children[0].next.attribs.src}  />
}

Typescript 抱怨某些类型不匹配,但它有效。我只需要弄清楚需要什么正确的类型断言,以便打字稿满意(目前,@ts-ignore 解决了这个问题)。