【发布时间】:2014-09-22 10:19:45
【问题描述】:
我有一个简单的 AngularJS 应用程序,它使用 ng-bind 和 ng-repeat 从模板呈现包含一些嵌套元素的父元素。我想获取生成的元素(作为字符串)的 HTML(innerHtml),以便在不同的应用程序中使用(在 AngularJS 的上下文之外,它将用作静态 HTML)。
使用jQuery('#parent-element').html() 很容易做到这一点。这种方法的问题在于 HTML 字符串包含 Angular 属性(例如 ng-bind)以及 Angular 生成的 cmets(来自 ng-repeat)和类(例如 ng-scope)。
我可能会想出一些正则表达式来直接从字符串中清除所有这些,但我很想知道是否有更简洁的方法来做到这一点。
那么,是否有更“Angular”的方式来防止生成属性/类/cmets 或提取生成元素的源 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, " ");
【问题讨论】:
-
首先,您不使用正则表达式解析 HTML。尤其是在 JavaScript 中。这是必须自动完成的事情吗?既然您正在构建一个新项目,为什么不自己复制 HTML 并删除 Angular 代码?
-
感谢您的评论。我不确定我是否理解您在解析 HTML 时的评论。这必须自动完成。这不是一次转换
-
你找到解决办法了吗?
-
.replace(/ng-.+?=".*?"/g, '') 这不起作用...我的 ngrepeats 没有完全替换... ="cat in cats " 这部分被留下了
标签: javascript jquery html angularjs