我一直在努力找到符合我需要的这个问题的答案,但要么我太苛刻,不能让其他用例工作,要么他们对我的案例不够具体。
基本上我想使用javascript / jQuery替换网页上的任何和所有&符号(&),这些&符号可能出现在链接href中,只有单词“and”。我尝试了几个不同版本的运气
var link = $("a").attr('href');
link.replace(/&/g, "and");
谢谢
答案 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#字符串进行更改。