我想在任何包含mailto:标记的href中添加对onclick事件的调用。
例如,我想采取以下任何一个实例:
<a href="mailto:user@domain.com">
并将其更改为:
<a href="mailto:user@domain.com" onclick="return function();">
我遇到的问题是mailto字符串的值不一致。
我需要说一些事情,例如将“>
”字符的所有实例替换为与“onclick="return function();">
”匹配的字符串中的“<a href="mailto:*">
”。
我在ColdFusion中使用REreplacenocase()函数执行此操作,但欢迎使用一般的RegEx建议。
答案 0 :(得分:3)
以下内容会将您的onclick添加到包含字符串str
的所有mailto链接中:
REReplaceNoCase(
str,
"(<a[^>]*href=""mailto:[^""]*""[^>]*)>",
"\1 onclick=""return function();"">",
"all"
)
这个正则表达式将会发现任何看起来像是电子邮件链接的<a ...>
标记(即使用mailto协议具有href属性),并为其添加onclick属性。直到标记末尾的所有内容都将存储在第一个后台(由替换字符串中的\ 1引用)中,以便保留<a>
中的任何其他属性。
答案 1 :(得分:2)
如果这样做的唯一目的是添加JavaScript事件处理程序,我认为Regex不是最佳选择。如果您使用JavaScript来连接您的JavaScript事件,如果JS不可用,您将获得更优雅的降级(例如,什么都不会发生,而不是在整个标记中散布onclick cruft)。
另外,使用DOM可以消除错误匹配或误报的可能性,因为正则表达式无法完全预测每个可能的标记形成:
function myClickHandler() {
//do stuff
return false;
}
var links = document.getElementsByTagName('a');
for(var link in links) {
if(link.href.indexOf('mailto:') == 0) {
link.onclick = myClickHandler;
}
}
答案 2 :(得分:1)
为什么不在前端使用像jQuery这样的库?
这样做$(function(){
$("a[href^=mailto]").click(function(){
// place the code you want to execute here
})
});