Clojure:部分更改 Enlive 中的属性值
Clojure: partly change an attribute value in Enlive
我有这个 test.html
文件,其中包含:
<div class="clj-test class1 class2 col-sm-4 class3">content</div>
A 想要定义一个仅更改 html 属性值的一部分的模板:
(deftemplate test "public/templates/test.html" []
[:.clj-test] (enlive/set-attr :class (partly-change-attr #"col*" "col-sm-8")))
这将呈现:
...
<div class="clj-test class1 class2 col-sm-8 class3">content</div>
...
感谢您的帮助!
我不知道这是否适合你,但如果你知道你要删除的 class 你可以这样做。
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (enlive/remove-class "col-sm-4")
[:.clj-test] (enlive/add-class "col-sm-8"))
在回复中:
(apply str (test-template))
=> "<html><body><div class=\"class1 clj-test class2 col-sm-8 class3\">content</div></body></html>"
刚找到 Christophe Grand 建议的 update-attr
fn in another thread:
(defn update-attr [attr f & args]
(fn [node] (apply update-in node [:attrs attr] f args)))
很酷!我们可以直接使用它:
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (update-attr :class clojure.string/replace #"col-.*?(?=\s)" "col-sm-8"))
或者从中构建一个更具体的 fn:
(defn replace-attr [attr pattern s]
(update-attr attr clojure.string/replace pattern s))
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (replace-attr :class #"col-.*?(?=\s)" "col-sm-8"))
我有这个 test.html
文件,其中包含:
<div class="clj-test class1 class2 col-sm-4 class3">content</div>
A 想要定义一个仅更改 html 属性值的一部分的模板:
(deftemplate test "public/templates/test.html" []
[:.clj-test] (enlive/set-attr :class (partly-change-attr #"col*" "col-sm-8")))
这将呈现:
...
<div class="clj-test class1 class2 col-sm-8 class3">content</div>
...
感谢您的帮助!
我不知道这是否适合你,但如果你知道你要删除的 class 你可以这样做。
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (enlive/remove-class "col-sm-4")
[:.clj-test] (enlive/add-class "col-sm-8"))
在回复中:
(apply str (test-template))
=> "<html><body><div class=\"class1 clj-test class2 col-sm-8 class3\">content</div></body></html>"
刚找到 Christophe Grand 建议的 update-attr
fn in another thread:
(defn update-attr [attr f & args]
(fn [node] (apply update-in node [:attrs attr] f args)))
很酷!我们可以直接使用它:
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (update-attr :class clojure.string/replace #"col-.*?(?=\s)" "col-sm-8"))
或者从中构建一个更具体的 fn:
(defn replace-attr [attr pattern s]
(update-attr attr clojure.string/replace pattern s))
(enlive/deftemplate test-template "templates/test.html" []
[:.clj-test] (replace-attr :class #"col-.*?(?=\s)" "col-sm-8"))