2014-09-22 55 views
3

我有一個簡單的AngularJS應用程序,該應用程序使用ng-bind和ng-repeat呈現包含模板中某些嵌套元素的父元素。我想抓取生成的元素的HTML(innerHtml)(作爲字符串),以用於不同的應用程序(在AngularJS的上下文之外將用作靜態HTML)。如何從HTML中刪除angularjs屬性和類?

這很容易通過使用jQuery('#parent-element').html()來完成。這種方法的問題在於,HTML字符串包含Angular屬性(例如ng-bind)以及Angular生成的註釋(來自ng-repeat)和類(如ng-scope)。

我可能會想出一些正則表達式來直接從字符串中清除所有這些,但我很想知道是否有更乾淨的方法來執行此操作。

那麼,是否有更多的「角」方法來防止生成屬性/類/註釋或提取生成元素的源代碼的乾淨版本?

UPDATE: 對於@蘇哈斯,團結和其他人誰可能會發現這個有用,我結束了使用效果很好足夠我使用區分

var cleaner = angular.element('#dirtier') 
      .html() 
      .replace(/<!--[^>]*-->/gi, '') 
      .replace(/\n/g, '') 
      .replace(/ng-.+?\b/g, '') 
      .replace(/ng-.+?=".*?"/g, '') 
      .replace(/class=""/g, '') 
      .replace(/\"/g, "\\\"") 
      .replace(/\s+/g, " "); 
+0

首先,你不要用正則表達式解析HTML。尤其不在JavaScript中。 這是必須自動完成的事情嗎?既然你正在構建一個新的項目,爲什麼不復制HTML並自己刪除角碼呢? – Cerbrus 2014-09-22 10:22:37

+0

感謝您的評論。我不確定我是否理解你的評論,然後解析HTML。這必須自動完成。這不是一個單一的時間轉換 – odedbd 2014-09-22 10:28:54

+0

你找到一個方法嗎? – 2015-07-24 12:28:34

回答

0

下面如果沒有一個非常大的數量的NG-的屬性,你可以嘗試這樣的事:

var div = $("#mydiv"); 
div.removeAttr("ng-repeat").removeAttr("ng-bind").... 

如果你有大量的人,看到Get all Attributes from a HTML element with Javascript/jQuery,你可以添加一個方法

div.removeAllAttr("ng-") 
+0

感謝您的建議。我仍然必須處理ng生成的類和註釋標記。 – odedbd 2014-09-22 12:01:02

+0

你在尋找一種消除它們的方法嗎? $(...)angular.removeAttr()。 ? – artm 2014-09-22 12:02:38

+0

謝謝,但我必須錯過一些東西。我的意思是這個角度會產生評論,比如「<! - ngRepeat:item in items - >」,我也需要清理它 – odedbd 2014-09-22 12:48:22

1

需要清除ATTRS值,然後清除容易

var x = String(a) 
    /*replace comments*/ .replace(/<!--(.*?)-->/gm, "") 
    /*replace value of attrs*/ .replace(/="(.*?)"/gm, "") 
    /*replace html markup */ .replace(/<[\s\S]*?>/g, "") 
    /*replace whitespaces */ .replace(/\s/g, '') 
0

我發現了一個soultion:

var x = angular.element('#id').html() 
     .replace(/(ng-\w+-\w+="(.|\n)*?"|ng-\w+="(.|\n)*?"|ng-(\w+-\w+)|ng-(\w+))/g, '') 
     .replace(/<!--(.*?)-->/gm, "") 

它清除任何 「NG-」 指令和 「NG-」 類!

+0

謝謝,這幾乎奏效。問題是它殺死了有效的類,例如foo-ng-bar,它們不是由角度設置的,也不應該被刪除。我想這個正則表達式需要進行調整以解釋ng--而不是一個詞的中間 – odedbd 2016-02-04 11:56:33