Javascript正则表达式替换页面上所有链接href中的&符号

时间:2016-01-26 12:57:39

标签: javascript jquery html regex

我一直在努力找到符合我需要的这个问题的答案,但要么我太苛刻,不能让其他用例工作,要么他们对我的案例不够具体。

基本上我想使用javascript / jQuery替换网页上的任何和所有&符号(&),这些&符号可能出现在链接href中,只有单词“and”。我尝试了几个不同版本的运气

var link = $("a").attr('href');
    link.replace(/&/g, "and");      

谢谢

2 个答案:

答案 0 :(得分:7)

您当前的代码替换了jQuery对象中元素的文本,但不更新DOM中的元素。

您可以通过向attr()提供一个函数来实现您所需要的功能,该功能将针对匹配集中的所有元素执行。试试这个:

$("a").attr('href', function(i, value) {
  return value.replace(/&/g, "and");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="/this-&-that">link</a>
<a href="/foo-&-bar">link</a>

答案 1 :(得分:0)

有时替换&时,我发现即使替换了&,我仍然有amp;。有一个解决方法:

var newUrl = "@Model.UrlToRedirect".replace(/&/gi, '%').replace(/%amp;/gi, '&');

使用此解决方案,您只需将&替换两次,即可使用。在我的MVC应用程序window.location.href = @ Model.UrlToRedirect的特定问题中,URL已被部分编码并具有查询字符串。在提出此解决方案之前,我尝试使用Uri作为C#类,escape()进行所有内容的编码/解码。使用我上面的逻辑的问题是其他事情可能会在以后炸毁查询字符串。一种解决方案是在这样的表单上放置一个隐藏字段或输入:

<input type="hidden" value="@Model.UrlToRedirect" id="url-redirect" />

然后在您的JavaScript中:

window.location.href = document.getElementById("url-redirect").value;

通过这种方式,javascript不会采用c#字符串进行更改。