在 ClojureScript/Om 应用程序中,我有一个 DOM 和一个 HTML 字符串。
如何将该 HTML 字符串转换为可以插入 DOM 的元素?
我已经开始使用 hickory 解析 HTML,计划然后处理 hickory 数据以创建 DOM 元素,但我认为必须有一种更简单的方法我忽略了。
(我不需要验证 HTML,我可以假设它足够安全和有效。)
在 ClojureScript/Om 应用程序中,我有一个 DOM 和一个 HTML 字符串。
如何将该 HTML 字符串转换为可以插入 DOM 的元素?
我已经开始使用 hickory 解析 HTML,计划然后处理 hickory 数据以创建 DOM 元素,但我认为必须有一种更简单的方法我忽略了。
(我不需要验证 HTML,我可以假设它足够安全和有效。)
Aleš Roubíček 的回答要好得多。我会留下这个 un case 它可以帮助某人。
山核桃提供了一个as-hiccup
功能。Hiccup使用 Clojure 数据结构来表示 HTML。您可以将这些数据结构提供给遵循相同约定的 Clojurescript 库:
您也可以使用Kioo / Enfocus,而不是传递文件路径,而是直接传递字符串。这会更直接,而不是使用两个库(Hickory + Sablono),您将只使用一个。需要注意的是,Kioo 和 Enfocus 遵循Enlive模板风格(这很好,但有一个学习曲线),并且文档专注于文件路径而不是字符串(即使可以传递字符串)。
您不需要解析 HTML 字符串。这是不必要的开销。React/Om 支持类似 DOM 的innerHTML
属性。只需这样设置道具:
(om.dom/div #js {:dangerouslySetInnerHTML #js {:__html "<b>Bold!</b>"}} nil)
如果您使用没有 Om 的普通 DOM,请将innerHTML
属性设置为:
(let [div (. js/document getElementById "elId")]
(set! (. div -innerHTML) "<b>Bold!</b>"))