仅使用普通javascript修改所有链接的href属性

时间:2015-12-03 16:58:24

标签: javascript jquery email

我有一个电子邮件模板,用于发送包含运费跟踪编号的送货通知,如下所示,我需要使用普通javascript清除href中的所有空格:

<a class="press-bt" id="clearSpace" href="https://www.royalmail.com/track-your-item?trackNumber=JX12 0008 990 90GB">TRACK</a>

我可以使用jQuery正确但不使用Javascript

我试图这样做:

window.onload = function() {
    var str = document.getElementById("mylink");
    document.write( str.replaceAll("\\s+","") );
});

使用jQuery工作代码:

$(document).ready(function() {
    $('a').attr('href', function (_, val) {
        return val.replace(/\s/g, '');
    });
});

2 个答案:

答案 0 :(得分:2)

如果可能,您应该删除服务器端的空间。我希望您理解没有 javascript会在您发送的电子邮件中运行。

// This prevents multiple `window.onload` conflict
window.addEventListener("load", clearLinks);
// This allows you to call the function even later if needed
function clearLinks() {
  // Get list of all links in the page
  var links = document.getElementsByTagName("a"); 
  // Loop through links
  for(var i=0,l=links.length; i<l; i++) {
     // No need to use `getAttribute`, href is defined getter in all browsers
     links[i].href = links[i].href.replace(/\s/g, "");
  }
}

在现代浏览器中,您可以使用Array.prototype.forEach替换for循环。这个方法通常可以在数组([ ... ])上调用,但getElementsByTagName返回的列表不是数组,所以请使用这个技巧:

function clearLinks() {
  var links = document.getElementsByTagName("a"); 
  // Loop through links
  Array.prototype.forEach.call(links, function(link) {
    link.href = link.href.replace(/[cC]/g, "c");
  });
}

搜索Function.prototype.call以了解有关调用对象上的函数的更多信息。

答案 1 :(得分:0)

通过id定位元素,抓住href属性,然后通过删除空格再次设置它。

var link = document.getElementById("mylink");
var href = link.getAttribute('href');
link.setAttribute('href', href.replace(/\s/g, ''));