ClojureScript/Om アプリには、DOM と HTML の文字列があります。
HTML の文字列を、DOM に挿入できる要素に変換するにはどうすればよいでしょうか?
私はヒッコリーで HTML を解析する道を歩み始め、ヒッコリー データを処理して DOM 要素を作成することを計画していますが、見落としているもっと簡単な方法があるに違いないと思います。
(HTML を検証する必要はありません。安全で十分有効であると想定できます。)
ClojureScript/Om アプリには、DOM と HTML の文字列があります。
HTML の文字列を、DOM に挿入できる要素に変換するにはどうすればよいでしょうか?
私はヒッコリーで HTML を解析する道を歩み始め、ヒッコリー データを処理して DOM 要素を作成することを計画していますが、見落としているもっと簡単な方法があるに違いないと思います。
(HTML を検証する必要はありません。安全で十分有効であると想定できます。)
Aleš Roubíček の回答ははるかに優れています。誰かに役立つ場合は、これを残します。
ヒッコリーはas-hiccup
機能を提供します。Hiccupは Clojure データ構造を使用して HTML を表現します。これらのデータ構造を、同じ規則に従う Clojurescript ライブラリにフィードできます。
Kioo / Enfocusを使用して、ファイル パスを渡す代わりに文字列を直接渡すこともできます。これはより直接的で、2 つのライブラリ (Hickory + Sablono) を使用する代わりに、1 つだけを使用します。注意点として、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>"))