有没有办法在新窗口中打开页面上的所有<a href>链接?

Tin*_*ehr 25 html javascript hyperlink

我有一堆<a href=".html">链接,想要在新窗口中打开它们.

我知道我可以进行搜索并替换所有内容以添加target="_blank"到我的所有<a href="...">链接.

但是,是否有一种快速的方法,例如设置CSS样式或添加一些JavaScript代码来完成同样的事情?

Lek*_*eyn 32

如果您的网页只包含链接,请考虑<base target="_blank">.这将打开一个新窗口中的每个链接(但也包括表单的目标,除非被覆盖<form target="_self">.

正如其他人所示,在不修改HTML源代码的情况下,您可以使用Javascript 迭代所有<a>标记并添加target属性或添加动态设置目标属性事件侦听器.


Sco*_*ott 28

如果你有jQuery它很简单

$("a").attr("target", "_blank");
Run Code Online (Sandbox Code Playgroud)

或定期Javascript

var links = document.links;
for (var i = 0; i < links.length; i++) {
     links[i].target = "_blank";
}
Run Code Online (Sandbox Code Playgroud)

根据@ Lekensteyn的建议,没有Javascript(为完整性而添加)

<base target="_blank">.
Run Code Online (Sandbox Code Playgroud)

  • 这对于调用脚本后添加的链接不起作用。 (2认同)

Rob*_*b W 10

CSS:否
.JavaScript:委派点击事件,target="_blank"在点击链接时添加属性.

document.body.addEventListener(function(e) {
    if (e.target.nodeName.toUpperCase() === 'A' && e.target.href) {
        e.target.target = '_blank';
    }
}, true);
Run Code Online (Sandbox Code Playgroud)

注意:如果<a>元素包含其他元素,您可能希望遍历树以查明是否单击了锚元素:

document.body.addEventListener(function(e) {
    var target = e.target;
    do {
        if (target.nodeName.toUpperCase() === 'A' && target.href) {
            target.target = '_blank';
            break;
        }
    } while (target = target.parentElement);
}, true);
Run Code Online (Sandbox Code Playgroud)

或者,如果你是一个jQuery爱好者:

$('body').on('click', 'a', function(e) {
    e.target.target = '_blank';
});
Run Code Online (Sandbox Code Playgroud)