Javascript 替换所有<;a>;HTML字符串中的标记
假设我有一个HTML字符串,其中包含一些Javascript 替换所有<;a>;HTML字符串中的标记,javascript,html,regex,Javascript,Html,Regex,假设我有一个HTML字符串,其中包含一些 为此: <a href="#" onclick="openLink('http://www.mylink.com')">whatever</a> 有什么想法吗?结果=主题。替换(/”; result = subject.replace(/<a.*?href="(.*?)".*?>(.*)<\/a>/img, "<a href=\"#\" onclick=\"openLink('$1')\"&g
为此:
<a href="#" onclick="openLink('http://www.mylink.com')">whatever</a>
有什么想法吗?结果=主题。替换(/”;
result = subject.replace(/<a.*?href="(.*?)".*?>(.*)<\/a>/img, "<a href=\"#\" onclick=\"openLink('$1')\">$2</a>");
您可以在字符串上使用此正则表达式:
var re = new RegExp("<a href=\"([^\"]+)\"", "g");
result =
string.replace(re,
"<a href=\"#\" onclick=\"openLink('$1')\"");
不要使用RegExp,因为如果不是不可能的话,很难将匹配安全地限制为仅针对目标的锚链接。相反,您应该使用每个浏览器都内置的DOM解析器 不要使用
onclick
html属性,因为不需要在javascript中调整html来添加javascript事件处理程序,它会阻止用户使用右键单击->“在新选项卡中打开”或“复制链接地址”
使用以下命令:
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);
}
});
或者您可以使用:
您可以使用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 +"');");
}
var-anchors=document.getElementsByTagName(“a”);
对于(var i=0;i
你为什么要使用正则表达式呢?好吧,我不需要使用正则表达式,只是用一种方法来替换链接。我喜欢img
标志。使它看起来像是与图像有关:Ponly与第一个链接一起工作…而不是html字符串中的所有链接我建议不要这样做…如果明天你看到它呢ed要添加/删除另一个属性?你要发布另一个SO问题并让其他人发布另一个正则表达式解决方案吗?这一个在全球范围内适用于所有链接!谢谢!:)@FidoBoy使用正则表达式是一个非常糟糕的主意!@d_不可避免的事实是-该链接在SO中被过度使用了很长一段时间-尽管它非常有趣,例如在输入是可预测的,目标是特定的特定任务中,使用regexp可能是最优雅、简洁和性能最好的。@Urigassi可能是。但在这种情况下,使用regexp是非常错误的。我在这个答案中看到的唯一限制是:“>不起作用。除此之外,我不是针对DOM,而是针对从REST服务获得的简单HTML字符串。为什么不建议使用onclick HTML属性?@stackErr,因为它涉及在运行时调整HTML代码,而可以完全用javascript完成。@FidoBoy委托的事件处理程序可能会有所帮助?
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);
}
});
$("a[href]").click(function (event) {
event.preventDefault();
openLink($(this).attr("href"));
});
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 +"');");
}