提问人:Birdzai 提问时间:10/21/2023 最后编辑:Birdzai 更新时间:10/23/2023 访问量:35
使用 html-react-parser 解析 HTML5 <video> 元素
Parsing HTML5 <video> element with html-react-parser
问:
我有一些从 CMS 返回的 HTML 内容,我希望在 NextJS V13 应用程序中显示这些内容。我正在使用该包而不是解析 HTML 内容,因为我还希望替换一些嵌入的标签,例如 ,并分别使用相应的 React 组件、Cloudinary 和自定义 React 组件。html-react-parser
dangerouslySetHtml
<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
答:
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 解决了这个问题)。
评论