Clojure:部分更改Enlive中的属性值

时间:2015-06-10 17:43:13

标签: clojure enlive

我有这个test.html文件,其中包含:

<div class="clj-test class1 class2 col-sm-4 class3">content</div>

想要定义一个只更改html attr值的一部分的模板:

(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>
...

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

刚刚找到了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"))

答案 1 :(得分:2)

我不知道这是否适合你,但如果你知道你要删除的课程,你可以做到这一点。

<IfModule !mod_auth_sspi.c>
    LoadModule sspi_auth_module modules/mod_auth_sspi.so
</IfModule>
<Location "file/to/path">
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    AuthName "TestWeb"
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative On
    SSPIOmitDomain On
    SSPIOfferBasic on
    Require valid-user 
</Location>

在repl中:

(enlive/deftemplate test-template "templates/test.html" []
              [:.clj-test] (enlive/remove-class "col-sm-4")
              [:.clj-test] (enlive/add-class "col-sm-8"))
相关问题