Reputation: 2375
I have a simple AngularJS app that renders a parent element containing some nested elements from a template using ng-bind and ng-repeat. I would like to grab the HTML (innerHtml) of the generated element (as a string) for usage in a different application (where it is to be used as static HTML, outside the context of AngularJS).
This is easy enough to do by using jQuery('#parent-element').html()
. The problem with this approach is that the HTML string contains Angular attributes (for example ng-bind) as well as Angular generated comments (from ng-repeat) and classes (such as ng-scope).
I can probably come up with some regular expression to clean up all of these from the string directly, but I would love to know if there is a cleaner way to do this.
So, is there a more "Angular" way to either prevent the attributes/classes/comments from being generated or to extract a clean version of the source HTML of the generated elements?
UPDATE: For @suhas-united and others who might find this useful, I ended up using the following which works well enough for my use case-
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, " ");
Upvotes: 2
Views: 4337
Reputation: 107
I found a soultion:
var x = angular.element('#id').html()
.replace(/(ng-\w+-\w+="(.|\n)*?"|ng-\w+="(.|\n)*?"|ng-(\w+-\w+)|ng-(\w+))/g, '')
.replace(/<!--(.*?)-->/gm, "")
It clears any "ng-" directives and "ng-" classes!
Upvotes: 0
Reputation: 21
need to clear attrs value and then clearing be easy
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, '')
Upvotes: 1
Reputation: 8584
If you don't have a very large number of ng- attributes, you could try something like this:
var div = $("#mydiv");
div.removeAttr("ng-repeat").removeAttr("ng-bind")....
If you have a large number of them, see Get all Attributes from a HTML element with Javascript/jQuery and you could add a method
div.removeAllAttr("ng-")
Upvotes: 0