【问题标题】:change <a> target to "_blank" depending on href根据 href 将 <a> 目标更改为“_blank”
【发布时间】:2018-12-11 00:02:56
【问题描述】:

我正在尝试对我页面上的链接进行排序,并根据它们的 URL 将其中一些链接打开到一个新窗口中。这是我的代码。它似乎不起作用。你知道为什么吗?

function MakeMenuLinksOpenInNewWindow() {
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        if (links[i].href == "http://testtesttest.org/")
            links[i].target = "_blank";
    }
}
MakeMenuLinksOpenInNewWindow();

【问题讨论】:

  • 你能展示一些 HTML 吗?
  • 你试过 links[i].setAttribute('target', '_blank') 而不是 links[i].target = "_blank";也许这会奏效。
  • 不,不会。请不要使用 getAttribute/setAttribute 编写 HTML 文档的脚本。它们的可读性低于普通的 DOM Level 1 HTML 属性,如href=,并且在 IE 中存在缺陷。
  • 使用 example.com(org、net 或 edu)作为示例。 (en.wikipedia.org/wiki/Example.com)

标签: javascript href target getelementsbytagname


【解决方案1】:

确保在调用此函数时 DOM 已加载:

window.onload = MakeMenuLinksOpenInNewWindow;

或:

<body onload="MakeMenuLinksOpenInNewWindow();">

【讨论】:

  • 有没有办法从.js文件中调用函数?
  • 您的函数不起作用的原因是 DOM(以及因此 a 链接)尚未加载,因此您的脚本无事可做。 Darin 的代码所做的是将您的函数绑定到文档的 onload 事件的执行(换句话说,一旦 DOM 加载并准备好,您的函数就会执行)。如果您将他建议的第一个代码 sn-p 添加到您的 .js 文件中,一切都应该正常。
  • 是的,试试我的第一个建议:window.onload = MakeMenuLinksOpenInNewWindow;
  • 但除此之外,功能还好吗?这就是我现在在 .js 文件中的内容: function MakeMenuLinksOpenInNewWindow() { var links = document.getElementsByTagName("a"); for (var i = 0; i byupas.org/") links[i].setAttribute('target', '_blank'); } 窗口。 onload = MakeMenuLinksOpenInNewWindow(); }
  • @christian:应该是window.onload = MakeMenuLinksOpenInNewWindow;,而不是window.onload = MakeMenuLinksOpenInNewWindow();
【解决方案2】:

您可能不应该设置此 javascript。而是使用 HTML。

但如果你必须...

function MakeMenuLinksOpenInNewWindow() {
    var links = document.getElementsByTagName("a");
    for (var i = 0, l = links.length; i < l; i++) {
        if (links[i].href === "http://www.example.com/")
            links[i].target = "_blank";
    }
}
window.onload = MakeMenuLinksOpenInNewWindow;

【讨论】:

  • 我把它放到了我的 .js 文件中,但它似乎不起作用。我还有什么需要做的吗?
  • 另外,您可能正在覆盖 window.onload 事件。
  • 函数 MakeMenuLinksOpenInNewWindow() { var linkies = document.links; for (var i = 0; i byupas.org/") linkies[i].target = "_blank"; } alert("HEY SUCKA") ; } window.onload = MakeMenuLinksOpenInNewWindow; 该函数肯定没有被调用,因为警报没有显示。
【解决方案3】:

使用 jQuery.js。它会让您的生活更轻松:

$("a[href='http://testtesttest.org/']").attr("target", "_blank");

【讨论】:

  • 他的javascript很好。告诉他用等效的 jquery 替换它不会解决他的问题。
【解决方案4】:

您的 javascript 看起来不错。假设您在尝试修改它们之前遇到不存在的链接元素的问题,您需要延迟运行您的方法,如其他帖子中所述。我首选的方法是将脚本内容移动到页面末尾。

因为看起来您正在使用外部 js 文件,所以您的页面会喜欢

    ... 
    <a href="http://testtesttest.org/" >whatever</a>
    ... 
    <script src="myscriptfile.js"></script>
</body>
</html>

如果你仍然有问题,你必须发布一个更完整的例子。

编辑:另一点。如果您仍然遇到问题,请确保您在 href 属性中所期望的 url 没有被重写。例如,如果您不提供 .com 网址,IE 会将尾随 / 添加到 .com 网址的末尾,这会导致您的比较失败。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2022-07-26
    • 2013-02-22
    • 1970-01-01
    • 2023-01-13
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多