Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从HTML中删除angularjs属性和类?_Javascript_Jquery_Html_Angularjs - Fatal编程技术网

Javascript 如何从HTML中删除angularjs属性和类?

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

我有一个简单的AngularJS应用程序,它使用ng bind和ng repeat呈现包含模板中一些嵌套元素的父元素。我想获取生成元素(作为字符串)的HTML(innerHtml),以便在不同的应用程序中使用(在AngularJS上下文之外,它将作为静态HTML使用)

通过使用
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的-不在一个词的中间