如何使用Clojurescript将文本转换为DOM元素? (和Om?)

问题描述:

在ClojureScript/Om应用程序中,我有一个DOM和一串HTML。如何使用Clojurescript将文本转换为DOM元素? (和Om?)

如何将该字符串的HTML转换为可插入DOM的元素?

我已经开始用山核桃分析HTML的路径,计划然后处理山核桃数据来创建DOM元素,但我认为必须有一种更简单的方式,我可以忽略。

(我并不需要验证HTML,我可以假设它足够安全和​​有效的。)

您不需要解析HTML字符串。这是不必要的开销。 React/Om支持类似DOM的innerHTML属性。刚刚成立的道具是这样的:

(om.dom/div #js {:dangerouslySetInnerHTML #js {:__html "<b>Bold!</b>"}} nil) 

如果不庵与普通DOM工作,设置innerHTML属性,如:

(let [div (. js/document getElementById "elId")] 
    (set! (. div -innerHTML) "<b>Bold!</b>")) 
+0

比我的回答好多了。 – sbensu

+0

使用Sablono时,它会是[:div {:dangerouslySetInnerHTML {:__ html“Bold!”}}] – jwhitlark

强麦Roubíček答案要好得多。我会离开这个不合情理的帮助某人。

Hickory提供as-hiccup功能。 Hiccup使用Clojure数据结构来表示HTML。您可以将这些数据结构提供给遵循相同约定的Clojurescript库:

  • Hiccups生成常规DOM元素。
  • Sablono生成React DOM元素并使用Om。

您也可以使用Kioo/Enfocus而不是传递文件路径,直接传递字符串。这将是更直接的,而不是使用两个库(Hickory + Sablono),你只能使用一个。需要注意的是Kioo和Enfocus遵循Enlive模板样式(这很棒,但有一条学习曲线),文档集中在文件路径而不是字符串(尽管可以传递字符串)。