如何在Enlive中生成一对元素的列表?

时间:2013-12-19 01:13:39

标签: clojure enlive

我是Enlive的新手。我发现我可以使用clone-for进行迭代,但是,它适用于单个元素。我想生成一对元素的列表,如下所示:

<div>
  <a href="url1">item 1</a><br>
  <a href="url2">item 2</a><br>
  ...
</div>

我尝试选择<a>并使用clone-for,但结果如下:

<div>
  <a href="url1">item 1</a><a href="url2">item 2</a>......<br>
</div>

如何在每次迭代中使用<a>重复<br>

1 个答案:

答案 0 :(得分:3)

我认为fragments适用于这种情况。

尝试以下几点:

(html/sniptest "<div><a href=\"url\">Label</a><br/></div>" {[:a] [:br]} 
  (clone-for [{label :label url :url} [{:label "Google" :url "http://www.google.com" }
                                       {:label "Stack Overflow" :url "http://www.stackoverflow.com"}]]
             [:a] (do-> (content label)
                        (set-attr :href url)))))
;; =>
<div>
     <a href="http://www.google.com">Google</a><br />
     <a href="http://www.stackoverflow.com">Stack Overflow</a><br />
</div>

如果您始终希望克隆div的完整内容(而不仅仅是片段:a -> :br),那么您可以使用first-childlast-child。只需将上面的{[:a] [:br]}选择器更改为{[:div first-child] [:div last-child]}即可。