gpt4 book ai didi

javascript - 如何使用 jQuery 从 HTML 字符串中的 anchor 中删除所有 ClientEvents

转载 作者:行者123 更新时间:2023-11-28 20:58:53 24 4
gpt4 key购买 nike

几个小时以来,我一直在努力解决一个看似简单的问题。我已经编写了一个可以运行的 REGEX 表达式,但是我希望有一种更优雅的方法来处理 HTML。该字符串将被传递给函数,而不是直接在页面中处理内容。看了很多例子后,我觉得我一定做错了什么。我正在尝试获取一个字符串并清除它的客户端事件,然后再将其保存到我们的数据库中,我认为 jQuery 非常适合此操作。

我想要:

Some random text <a href="http://stackoverflow.com" onclick="return evilScripts();">click here</a> and a link with any event type
//to become:
Some random text <a href="http://stackoverflow.com">click here</a> and a link with any event type

这是我的代码

function RemoveEvilScripts(){
var myDiv = $('<div>').html('testing this <a href="#Foo" onclick="return runMyFunction();">Do it!</a> out');
//remove all the different types of events
$(myDiv).find('a').unbind();
return $(myDiv).html();
}

我的结果是,onClick 保留在 anchor 标记中。

最佳答案

这是一个纯 Javascript 解决方案,它从任何以“on”开头的 DOM 元素(及其子元素)中删除任何属性:

function cleanHandlers(el) {

// only do DOM elements
if (!('tagName' in el)) return;

// attributes is a live node map, so don't increment
// the counter when removing the current node
var a = el.attributes;
for (var i = 0; i < a.length; ) {
if (a[i].name.match(/^on/i)) {
el.removeAttribute(a[i].name);
} else {
++i;
}
}

// recursively test the children
var child = el.firstChild;
while (child) {
cleanHandlers(child);
child = child.nextSibling;
}
}

cleanHandlers(document.body);​

工作演示位于 http://jsfiddle.net/alnitak/dqV5k/

关于javascript - 如何使用 jQuery 从 HTML 字符串中的 anchor 中删除所有 ClientEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com