【问题标题】:Open all links in new tabs with jQuery使用 jQuery 打开新标签页中的所有链接
【发布时间】:2011-09-11 08:31:48
【问题描述】:

我有一些链接通过 JSON 动态放置在我的页面中,无法直接编辑它们。我想强制所有链接在新标签页中打开,ala target="_blank"

认为这会起作用..但遗憾的是它不是。有什么想法吗?

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

这是一个带有动态代码的 jsFiddle: http://jsfiddle.net/danielredwood/mrgta/7/

【问题讨论】:

    标签: jquery anchor target attr


    【解决方案1】:

    您可以这样做(让用户浏览器决定是否打开新窗口或标签)

    $('a').live('click', function() {
        window.open($(this).attr('href'));
        return false;
    });
    

    【讨论】:

    • 我想知道为什么这被否决了?它应该像宣传的那样工作。在旁注中,我确实喜欢将target 属性设置为_blank,正如其他答案中所建议的那样,因为我是老派,而且效果很好。但是这个特殊的解决方案——如果有人关心这些事情——实际上是应该推荐的,如果有人关心验证(因为target 是一个已弃用的属性)。
    • P.S.,请在此页面上查看我的单独答案,该答案支持相同的答案还有另一个原因:时间。
    【解决方案2】:

    您的问题可能是时间问题。

    请记住,当您调用 $('a').attr(...whatever...) 之类的名称时,它会立即对页面上的所有现有元素生效。所以,...如果您的 tweet 插件是异步的并且执行时间超过 0 毫秒,那么您的代码似乎正在尝试更改页面上尚不存在的链接的属性

    也就是说,您可能 (A) 调用 tweet 插件,(B) 更改页面上的所有链接,然后 (C) 推文插件完成并在获得的页面上注入一堆新链接之前错过了。

    因此,您可以尝试查看您正在使用的tweet 插件是否具有某种“全部完成”或其他完成回调,然后您可以使用它来更改链接标签。或者,就像我也赞同的另一个答案所建议的那样,不仅要尝试更改链接标签,还要在页面上的任何链接点击时收听(实时),并在那个时间点拦截它们。这样,您无需担心推文插件的时间/完成,因为您可以使用在任何时间点都有效的事件委托 (live)。有关如何执行此操作的一个很好的示例,请参阅 Petah 的答案。

    祝你好运!

    【讨论】:

      【解决方案3】:

      这对我有用:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html>
      <head>
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
      </head>
      
      <body>
      
      
      <a href="http://www.google.com">test</a>
      <br />
      <a href="http://www.yahoo.com">test2</a>
      
      <script>
          $('a').attr('target', '_blank');
      </script>
      
      </body>
      
      </html>
      

      【讨论】:

      • 如果您将'new' 替换为'_blank',它仍然对您有用吗?只是问问而已。如果是这样,那么OP可能还有其他问题。如果没有,我想知道原因。
      • @Dave Maple - 没有骰子。加载了一个 jsFiddle 来演示。发表在问题中
      • @Dave Maple - 忘了提及您的代码适用于现有链接,但不适用于通过 JSON 加载的链接。
      • @Dave:是的,她肯定有另一个问题。
      • @Dave - 它在 jsFiddle 中。使用 Twitter 插件。
      【解决方案4】:

      试试:

      $('a').attr({ target: "_blank" });
      

      另外,请尝试“_new”而不是空白。如果这不起作用,为什么不发布生成的 html 或整个 javascript 代码?

      【讨论】:

        【解决方案5】:

        它不起作用,因为当$('a').attr("target","_blank"); 被触发时,&lt;a&gt; 还不是您页面的一部分。

        【讨论】:

        • @technopeasant,我不确定。
        猜你喜欢
        • 2017-07-19
        • 1970-01-01
        • 2011-09-29
        • 2023-01-26
        • 2017-07-16
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多