Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用enlive';使用HTML模板克隆以删除伪子元素_Html_Clojure_Enlive - Fatal编程技术网

如何使用enlive';使用HTML模板克隆以删除伪子元素

如何使用enlive';使用HTML模板克隆以删除伪子元素,html,clojure,enlive,Html,Clojure,Enlive,看 一些人对使用clone for将动态生成的元素列表插入包含多个虚拟元素的模板表示困惑。例如,模板可能如下所示 <ul> <li>foo</li> <li>bar</li> <li>baz</li> </ul> <ul> <li>real</li> <li>data</li> <li&

一些人对使用
clone for
将动态生成的元素列表插入包含多个虚拟元素的模板表示困惑。例如,模板可能如下所示

<ul>
    <li>foo</li>
    <li>bar</li>
    <li>baz</li>
</ul>
<ul>
    <li>real</li>
    <li>data</li>
    <li>here</li>
    <li>wurdz</li>
</ul>

但这就给第2到第n个元素留下了虚拟数据。我们如何简单地删除所有虚拟元素并替换为真实元素?

我一直使用的解决方案是:

(defsnippet my-snippet "my-template.html" [:ul] [items]
  [[:li (html/but html/first-of-type)]] nil
  [[:li html/first-of-type]] (html/clone-for [ii items] ...))

这将删除所有虚拟节点,并插入包含我的内容的新节点。

我认为另一种方法可能是这样的:

(defsnippet my-snippet "my-template.html" [:ul [:li (nth-of-type 1)]] [items] 
  [:li] (clone-for [ii items]
      [:li] (content ii)))

(deftemplate my-template "my-template.html"
  [items]
    [:ul] (content (my-snippet items)))
首先,使用要用真实数据克隆的特定元素定义代码段,然后可以定义模板并替换要放置代码段的元素的内容。这样,您就不必删除虚拟节点

(defsnippet my-snippet "my-template.html" [:ul [:li (nth-of-type 1)]] [items] 
  [:li] (clone-for [ii items]
      [:li] (content ii)))

(deftemplate my-template "my-template.html"
  [items]
    [:ul] (content (my-snippet items)))