首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >追加到Enlive中的属性

追加到Enlive中的属性
EN

Stack Overflow用户
提问于 2012-09-26 00:06:06
回答 2查看 899关注 0票数 3

是否可以使用enlive向属性追加一个值?

示例:我有这个

代码语言:javascript
复制
<a href="/item/edit/">edit</a>

并且想要这个

代码语言:javascript
复制
<a href="/item/edit/123">edit</a>

我目前正在这样做:

代码语言:javascript
复制
(html/defsnippet foo "views/foo.html" [:#main]
  [ctxt]
  [:a] (html/set-attr :href (str "/item/edit/" (ctxt :id))))

但我不希望将URL嵌入到我的代码中,只需将id附加到现有的URL

代码语言:javascript
复制
(html/defsnippet foo "views/foo.html" [:#main]
  [ctxt]
  [:a@href] (html/append (ctxt :id)))
EN

回答 2

Stack Overflow用户

发布于 2012-10-02 16:51:26

@ddk答案是正确的,但您可能更喜欢一种更通用的方法来解决问题

代码语言:javascript
复制
(defn update-attr [attr f & args]
    (fn [node]
      (apply update-in node [:attrs attr] f args))))

然后

代码语言:javascript
复制
(update-attr :href str "123")
票数 6
EN

Stack Overflow用户

发布于 2012-09-26 02:03:27

您可以始终以与set-attr相同的方式编写自己的append-attr。这是我的尝试

代码语言:javascript
复制
(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>表示上给出了以下内容

代码语言:javascript
复制
((append-attr :href "/bar") 
  {:tag :a, :attrs {:href "/foo"}, :content "A link"})
;=> {:tag :a, :attrs {:href "/foo/bar"}, :content "A link"}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12586849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档