假设我有一个包含一些<a href="..">
标签的HTML字符串。如何替换所有这些来翻译它:
<a href="http://www.mylink.com">whatever</a>
进入这个:
<a href="#" onclick="openLink('http://www.mylink.com')">whatever</a>
有什么想法吗?
答案 0 :(得分:2)
您可以在字符串上使用此正则表达式:
var re = new RegExp("<a href=\"([^\"]+)\"", "g");
result =
string.replace(re,
"<a href=\"#\" onclick=\"openLink('$1')\"");
<强>更新强>
要在href
之前考虑属性,您可以使用:
var re = new RegExp("<a([^>]* )href=\"([^\"]+)\"", "g");
result =
string.replace(re,
"<a$1href=\"#\" onclick=\"openLink('$2')\"");
答案 1 :(得分:1)
不要使用RegExp,因为将匹配安全地限制为您定位的锚链接是非常困难的,如果不是不可能的话。相反,你应该使用自然每个浏览器都内置的DOM解析器。
并且不使用onclick
html属性,因为不需要在javascript中调整html来添加javascript事件处理程序,并且它会阻止用户使用诸如右键单击之类的内容 - &gt; &#39;在新标签中打开&#39;或复制链接地址&#39;。
使用此:
var anchors = document.getElementsByTagName("a");
for (var i = 0 ; i != anchors.length ; i++) {
anchors[i].addEventListener("click", function (event) {
var href = this.getAttribute("href");
if (href) {
event.preventDefault();
openLink(href);
}
});
}
或者您可以使用委派的事件处理程序:
function openLink(href) {
alert("openLink " + href);
}
document.addEventListener("click", function (event) {
if (event.target.tagName === "A" && event.target.href) {
event.preventDefault();
openLink(event.target.href);
}
});
或者您可以使用jQuery:
$("a[href]").click(function (event) {
event.preventDefault();
openLink($(this).attr("href"));
});
答案 2 :(得分:1)
您可以使用JS轻松完成此操作。
查找DOM和setAttributes中的所有锚元素:
var anchors = document.getElementsByTagName("a");
for(var i =0; i < anchors.length; i++)
{ var myLink = anchors[i].getAttribute("href");
anchors[i].setAttribute("href","#");
anchors[i].setAttribute("onclick", "openLink('"+ myLink +"');");
}
答案 3 :(得分:0)
result = subject.replace(/<a.*?href="(.*?)".*?>(.*)<\/a>/img, "<a href=\"#\" onclick=\"openLink('$1')\">$2</a>");