【问题标题】:Is there a way to open all <a href> links on a page in new windows?有没有办法在新窗口中打开页面上的所有 <a href> 链接?
【发布时间】:2012-08-27 11:11:31
【问题描述】:

我有一堆&lt;a href=".html"&gt; 链接,我想让它们都在新窗口中打开。

我知道我可以搜索并替换所有以将 target="_blank" 添加到我的所有 &lt;a href="..."&gt; 链接。

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

【问题讨论】:

  • 您可以搜索和替换您的项目。
  • 重构总是比变通方法更好。从长远来看,您可以为自己节省大量工作。因此,只需进行搜索和替换,而不是引入一些额外减慢页面速度的 javascript 解决方案。
  • 我说我知道我可以进行搜索和替换-_-
  • 没有人问一个问题,是否真的需要。为什么要在新选项卡/窗口中打开所有链接?结果,您的网站将无法在某些移动设备上显示(例如带有没有标签的浏览器的 Kindle)并且用户会抱怨(当网站打开新标签中的一些链接时,我讨厌它,更不用说所有,甚至是内部的)。链接是用于导航的,那么为什么要避免将用户导航到他想去的地方呢?
  • @Tadeck 我认为使用 BASE TARGET 解决方案,我的页面可以在这些设备中运行。这是一个很好的解决方案。

标签: javascript html hyperlink


【解决方案1】:

CSS:没有。
JavaScript:委托点击事件,在点击链接时添加target="_blank"属性。

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

注意:如果&lt;a&gt; 元素包含其他元素,您可能需要遍历树以确定是否单击了锚元素:

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);

或者,如果您是 jQuery 爱好者:

$('body').on('click', 'a', function(e) {
    e.target.target = '_blank';
});

【讨论】:

    【解决方案2】:

    如果你有 jQuery,那很简单

    $("a").attr("target", "_blank");
    

    或者普通的Javascript

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

    根据@Lekensteyn 的建议,不使用 Javascript(为完整性而添加)

    <base target="_blank">.
    

    【讨论】:

    • 您应该使用document.links 而不是getElementsByTagName("a")。这样做的好处是您只包含链接(即&lt;a href&gt; 元素)而不是像&lt;a name="foo"&gt; 这样的东西。
    • 这不适用于调用脚本后添加的链接。
    【解决方案3】:

    如果您的页面仅包含链接,请考虑使用&lt;base target="_blank"&gt;。这会在新窗口中打开每个链接(但也包括表单的目标,除非被 &lt;form target="_self"&gt; 覆盖。

    正如其他人所展示的,在不修改 HTML 源代码的情况下,您可以使用 Javascript 到 iterate through all &lt;a&gt; tags and add the target attribute 或添加 event listener that sets the target attribute dynamically

    【讨论】:

      【解决方案4】:

      是的,你可以用 JS 将属性添加到 HTML 文档中名为 'target' 且值为 '_blank' 的所有链接;)

      您还可以使用 this 打开从 url 到 javascript:openInWindow(url) 的所有链接的替换 href,并在 JS 中编写打开新窗口的函数并将其位置设置为 url ;) Google 会在这两个方面为您提供帮助。

      【讨论】:

        【解决方案5】:

        只需使用 Javascript 向页面添加一个 html base 元素:

        var e = document.createElement("base");
        e.target = "_blank";
        document.head.appendChild(e); 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-05
          • 2019-09-05
          • 2011-05-09
          • 2019-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多