重写页面上的所有链接,通过javascript在新标签页中打开

时间:2016-12-31 11:53:56

标签: javascript jquery html

要使页面中的所有链接都不可点击,我使用以下代码:

<html>
<body>
<script>
document.body.onclick=function(e){
e.preventDefault();
return false;
}
</script>
<a href="http://www.google.com">Link 1</a>
<a href="http://www.ebay.com">Link 2</a>
</body>
</html>

现在我知道要在新标签页中打开链接,我们可以使用:

target="_blank"

但这不是问题,问题是,我怎么能:

1)如上所示,首先使所有链接无法点击后,通过javascript点击所有链接。

2)使用javascript重新编写页面中的所有URL以在新标签页中打开,AKA如何使用javascript将必要的target="_blank"属性添加到任何HTML页面中的所有链接?

谢谢!

5 个答案:

答案 0 :(得分:4)

<html>
<body>
<script>
document.body.onclick=function(e){ // or addEventListener
  e.preventDefault();
  return false;
}
window.onload=function() {
  document.body.onclick=null;
  var links = document.querySelectorAll("a");
  for (var i=0;i<links.length;i++) {
    links[i].target="_blank";
  }
}
</script>
<a href="http://www.google.com">Link 1</a>
<a href="http://www.ebay.com">Link 2</a>
</body>
</html

或在jQuery中使用attr

$("body").on("click",function(e){
  e.preventDefault();
  return false; // not necessary
});
$(function() {
  $("body").off("click");
  $("a").attr("target")="_blank";
})

答案 1 :(得分:1)

如果您可以启用对链接的点击,则可以通过将此标记添加到页面<head>来更改默认目标:

<base target="_blank" />

答案 2 :(得分:0)

这很容易:

var aList = document.getElementsByTagName('a');
for(var i = 0 ; i < aList.length; i++){
    aList[i].setAttribute('target', '_blank');
}

但是你需要把它放在文档的末尾。

但是如果你不喜欢它在文档的最后并希望它可以在所有浏览器中工作,你可以这样做:

var DOMReady = function(a,b,c){b=document,c='addEventListener';b[c]?b[c]('DOMContentLoaded',a):window.attachEvent('onload',a)}

DOMReady(function () {
  var aList = document.getElementsByTagName('a');
  for(var i = 0 ; i < aList.length; i++){
    aList[i].setAttribute('target', '_blank');
  }
});

DOMReady函数用于在dom中对文档结构进行整形。此部分用于此页面中的其他代码:Tiny Cross Browser DOM Ready

答案 3 :(得分:0)

只需添加:

$(function(){
    $('a').attr('target', '_blank');
});

而不是

document.body.onclick=function(e){
    e.preventDefault();
    return false;
}

但是,请记住,您需要包含jQuery才能够这样做。

答案 4 :(得分:0)

将每个锚点的target属性设置为'_blank'

document.querySelectorAll("a").forEach(a => a.target = '_blank' );