Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换所有<;a>;HTML字符串中的标记_Javascript_Html_Regex - Fatal编程技术网

Javascript 替换所有<;a>;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

假设我有一个HTML字符串,其中包含一些

为此:

<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 +"');");
}