1

我有这个 html 片段。我想解析那个片段并发出没有 javascript 标签的 html

<html>
    <body>
        <div class="content">lorem ipsum</div>
        <script  src="/js/jquery.js" type="text/javascript"></script>
        <script src="/js/bootstrap.min.js" type="text/javascript"></script>
    </body>
</html>

变成这个

<html>
    <body>
        <div class="content">lorem ipsum</div>
    </body>
</html>

我找不到删除标签的激活助手功能。

我找到了解决方案,感谢这个例子。所以我写了这段代码,js消失了

(html/deftemplate template-about "../resources/public/build/about/index.html"
    []
    [:script] (fn js-clear [& args] nil)
)
4

3 回答 3

2

当我需要有条件地删除渲染页面的一些标签时,我通常的方法是使用一个nil returning函数。

例如

(html/defsnippet upgrade-plan "page_templates/upgrade-plan.html" [:#upgradePlanSection]
  [pending-invoice ... ]
  ...
  [:#delayedPlanWarning] #(when pending-invoice
                            (html/at %
                                     [:#delayedPlanWarning] (html/remove-attr :style)
                                     [:.messagesText] (html/html-content (tower/t :plans/pending-invoice 
                                                                                (:id pending-invoice)))))
  ...

在这种特殊情况下,如果pending-invoice是从呈现的 html 中删除nil的元素,因为函数返回.delayedPlanWarningnil

于 2013-10-24T16:41:02.450 回答
0

删除整个标签时,您只需要nil用作您的转换。

(deftemplate tester1
             (java.io.StringReader. "<html><body><div class=\"content\">...")
             []
             [:script] nil)

(template1)

在您的情况下,您将替换为StringReader您正在使用的资源。

于 2013-10-24T20:07:37.027 回答
0

如果您不介意额外的解析和发射,以下会很好:

(def orig (html-resource (java.io.StringReader. "<html>
<body>
    <div class=\"content\">lorem ipsum</div>
    <script  src=\"/js/jquery.js\" type=\"text/javascript\"></script>
    <script src=\"/js/bootstrap.min.js\" type=\"text/javascript\"></script>
</body>
</html>")))
(def stripped (transform orig [(keyword "script")] (substitute "")))
(apply str (emit* stripped))
于 2013-10-24T17:53:31.023 回答