Javascript 如何从HTML中删除angularjs属性和类?
我有一个简单的AngularJS应用程序,它使用ng bind和ng repeat呈现包含模板中一些嵌套元素的父元素。我想获取生成元素(作为字符串)的HTML(innerHtml),以便在不同的应用程序中使用(在AngularJS上下文之外,它将作为静态HTML使用) 通过使用Javascript 如何从HTML中删除angularjs属性和类?,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我有一个简单的AngularJS应用程序,它使用ng bind和ng repeat呈现包含模板中一些嵌套元素的父元素。我想获取生成元素(作为字符串)的HTML(innerHtml),以便在不同的应用程序中使用(在AngularJS上下文之外,它将作为静态HTML使用) 通过使用jQuery('#parent element').html()可以很容易地做到这一点。这种方法的问题在于HTML字符串包含角度属性(例如ng bind)以及角度生成的注释(来自ng repeat)和类(例如ng scop
jQuery('#parent element').html()
可以很容易地做到这一点。这种方法的问题在于HTML字符串包含角度属性(例如ng bind)以及角度生成的注释(来自ng repeat)和类(例如ng scope)
我可能会想出一些正则表达式来直接从字符串中清除所有这些内容,但我很想知道是否有更干净的方法来实现这一点
那么,有没有更“有角度”的方法来阻止属性/类/注释的生成,或者提取生成元素的源HTML的干净版本
更新:
对于@suhas united和其他可能认为这很有用的人来说,我最终使用了以下内容,这些内容对于我的用例来说已经足够有效了-
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, " ");
var cleaner=angular.element(“#dirtier”)
.html()
.replace(//gi,“”)
.替换(/\n/g“”)
.替换(/ng-.+?\b/g')
.替换(/ng-.+?=“*?”/g,”)
.替换(/class=”“/g'')
.replace(/\“/g,\\\”)
.替换(/\s+/g,“”);
如果您没有非常多的ng属性,可以尝试以下方法:
var div = $("#mydiv");
div.removeAttr("ng-repeat").removeAttr("ng-bind")....
如果您有大量的方法,请参阅,您可以添加一个方法
div.removeAllAttr("ng-")
需要清除ATTR值,然后清除将很容易
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, '')
var x=String(a)
/*替换注释*/。替换(//gm,“”)
/*替换属性的值*/。替换(/=“(.*?)”/gm,”)
/*替换html标记*/.replace(//g,“”)
/*替换空格*/。替换(/\s/g,“”)
我找到了一个解决方案:
var x = angular.element('#id').html()
.replace(/(ng-\w+-\w+="(.|\n)*?"|ng-\w+="(.|\n)*?"|ng-(\w+-\w+)|ng-(\w+))/g, '')
.replace(/<!--(.*?)-->/gm, "")
var x=angular.element('#id').html()
.替换(/(ng-\w+-\w+=“(.|\n)*?“|ng-\w+=”(.|\n)*?“|ng-(\w+)))(.)
.replace(//gm,“”)
它清除任何“ng-”指令和“ng-”类 首先,你不能用正则表达式解析HTML。尤其是在JavaScript中。这是必须自动完成的事情吗?既然您正在构建一个新项目,为什么不自己复制HTML并删除angular代码呢?谢谢您的评论。我不确定我是否理解你关于重新解析HTML的评论。这必须自动完成。这不是一次转换。你能找到一种方法吗?.replace(/ng-。+?=“*?”/g')这不起作用。。。我的ngrepeats没有完全被替换=“猫中有猫”这部分内容落后了,谢谢你的建议。我仍然需要处理ng生成的类和注释标记。您是否在寻找一种从角度删除它们的方法$(…).angular.removeAttr()?谢谢,但我一定错过了什么。我的意思是angular会生成评论,比如“”,我也需要清理这些评论啊,好吧,我没有想到这些。不知道你能做些什么,但就像Cerburs说的,不要使用regex,谢谢,这几乎有效。问题是它杀死了有效的类,比如FooNgBar,这些类不是由angular设置的,不应该被删除。我猜正则表达式需要调整为NG的-不在一个词的中间