删除所有内联JavaScript – Jquery

在我的代码中,我有一个父DOM元素docElem 。 这是一个包含完整HTML文档的iframe。 现在我想删除所有内联JavaScript。 如何在JQuery中做到这一点。 我们是否有任何选择器可以提取所有具有匹配的属性的元素on.*正则表达式?

请注意,我要求所有内联脚本不单独onclick ….

编辑为了消除任何混淆,这里是一个示例代码:

 var docHtml = '
'; var docElem = $($.parseHTML('')) .append($.parseHTML(docHtml, true)); var tagList = //some thing here that can bring me the img tag and the div tag.

您可以使用Google Caja项目中的html-sanitizer 。 它可以在浏览器中单独使用。

你可以从:

 http://caja.appspot.com/html-css-sanitizer-minified.js 

要么:

 http://caja.appspot.com/html-sanitizer-minified.js 

(取决于你是否还需要消毒css)

你必须定义两个函数来告诉清理程序你希望它如何处理URL和元素ID(我在这里将它们命名为sanUrl()sanId() )。

例如,您可能希望完全删除ID,以便它们不会干扰您自己的ID:

 function sanId(id) { return undefined; } 

或者您可能想要添加一些前缀:

 function sanId(id) { return "PREFIX" + id; } 

如果对你没问题,可以直接使用它们:

 function sanId(id) { return id; } 

与URL相同:

 function sanUrl(url) { // sanitize urls if needed // eg. add a prefix or remove relative/absolute urls etc. return url; } 

现在你可以像这样使用html_sanitize()函数:

 var sanitizedHtml = html_sanitize(originalHtml, sanUrl, sanId); 

它会比你描述的更多,这意味着如果你有一些你没有预料到的输入,你就不会遇到麻烦。

它还会剥离html,head和body标签,所以如果你需要它们,你可以添加:

 fullHtml = "" + sanitizedHtml + ""; 

你也可以。 使用如下代码获取图片url:

 $(sanitizedHtml).find('img').addBack().filter('img') .each(function (i, el) { var url = $(el).attr('src'); // do something with the URL: alert(url); }); 

看这个演示:

http://codepen.io/rsp/pen/hLmcE