是否可以使用enlive向属性追加一个值?
示例:我有这个
<a href="/item/edit/">edit</a>并且想要这个
<a href="/item/edit/123">edit</a>我目前正在这样做:
(html/defsnippet foo "views/foo.html" [:#main]
[ctxt]
[:a] (html/set-attr :href (str "/item/edit/" (ctxt :id))))但我不希望将URL嵌入到我的代码中,只需将id附加到现有的URL
(html/defsnippet foo "views/foo.html" [:#main]
[ctxt]
[:a@href] (html/append (ctxt :id)))发布于 2012-10-02 16:51:26
@ddk答案是正确的,但您可能更喜欢一种更通用的方法来解决问题
(defn update-attr [attr f & args]
(fn [node]
(apply update-in node [:attrs attr] f args))))然后
(update-attr :href str "123")发布于 2012-09-26 02:03:27
您可以始终以与set-attr相同的方式编写自己的append-attr。这是我的尝试
(defn append-attr
[& kvs]
(fn [node]
(let [in-map (apply array-map kvs)
old-attrs (:attrs node {})
new-attrs (into {} (for [[k v] old-attrs]
[k (str v (get in-map k))]))]
(assoc node :attrs new-attrs))))在将"/bar"附加到href时,在enlive的<a href="/foo">A link</a>表示上给出了以下内容
((append-attr :href "/bar")
{:tag :a, :attrs {:href "/foo"}, :content "A link"})
;=> {:tag :a, :attrs {:href "/foo/bar"}, :content "A link"}https://stackoverflow.com/questions/12586849
复制相似问题