2013-10-24 193 views
1

我有這個html代碼片段。我想分析該片段,併發出HTML沒有JavaScript代碼enlive刪除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> 

我無法找到enlive輔助函數來移除標籤。

我發現該解決方案感謝您的例子。所以,我寫這篇文章的代碼和JS消失

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

回答

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-invoicenildelayedPlanWarning元件從呈現的HTML去除,因爲該函數返回nil

+0

非常感謝 – calvin91

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)) 
0

當取下整個標籤,你只需要使用nil爲您的轉型。

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

(template1) 

對於您的情況,您將用正在使用的資源替換StringReader