删除所有内联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); });
看这个演示: