使用JavaScript添加和删除URL中的分隔符

3
我在网页上有链接并想要对它们进行掩盖。我希望在 onLoad 时,所有 URL 中的点(在 href 中)都将被替换为类似于 "|" 的内容,
这样,就不是像这样: <a href="http://www.example.com">link</a> 而是像这样: <a href="http://www"|"example"|"com">link</a>
然后,在 onClick 中,应该将替换反转以使链接再次正常工作。
需要帮助让此代码正常工作:

 function mask() {
     var str = document.getElementByName("a");
     var x = str.attributes.href.value.replace('.', '"|"');
     document.getElementsByTagName("a").attributes.href.value = x;
}

function unmask(){
     var str = document.getElementByName("a");
     var x = str.attributes.href.value.replace('"|"', '.');
     document.getElementsByTagName("a").attributes.href.value = x;

}
<body onLoad="mask()">

<a href="http://www.example.com" onclick="unmask()">link</a>

</body>

2个回答

1

你的代码存在以下几个问题:

  1. document.getElementByName("a") 是无效的
  2. str.attributes.href.value 是无效的
  3. 你需要进行全局替换,将所有的 . 替换为 |,反之亦然。

function mask() {
     var str = document.getElementsByTagName("a")[0];
     var x = str.href.replace(/\./g, '"|"');
     str.href = x;
}

function unmask(){
     var str = document.getElementsByTagName("a")[0];
     var x = str.href.value.replace(/"|"/g, '.');
     str.href = x;
}
<body onLoad="mask()">

<a href="http://www.example.com" onclick="unmask()">link</a>

</body>


1
去掉口罩不起作用。你在去掉口罩的正则表达式中有问题——我认为是未转义的管道符号。 - Evgeniy

1

您需要使用 getElementsByTagName 方法:

function mask() {
  var a = document.getElementsByTagName('a');
  for (var i = 0; i < a.length; i++) {
    a[i].attributes.href.value = a[i].attributes.href.value.replace(/\./g, '"|"');
  }
}

function unmask() {
  var a = document.getElementsByTagName('a');
  for (var i = 0; i < a.length; i++) {
    a[i].attributes.href.value = a[i].attributes.href.value.replace(/"\|"/g, '.');
  }
}
<body onLoad="mask()">
  <a href="http://www.example.com" onclick="unmask()">link</a>
</body>


为什么 onError 触发不起作用?比如 <img src="non-existing-image.gif" onerror="unmask()"/> - Evgeniy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接