【问题标题】:http javaScript set attribute default to all tagshttp javaScript 设置属性默认为所有标签
【发布时间】:2017-03-09 16:12:16
【问题描述】:

我对 HTML 很陌生,只是想弄清楚...

我正在尝试为标签设置一个属性,更具体地说是目标属性,以便网页中的所有链接都可以在不同的选项卡中打开...

我遇到了jQuery函数,尝试实现它没有成功...

我的脚本标签是这样的:

<script src="static/jquery-3.1.1.js">
    $(document).ready(function() {
        $('a').target = "_blank"
        $("a").attr("target", "_blank");
    });

    $('a').target = "_blank"
</script>

当然,当 jquery 文件位于所提到的静态目录下的同一目录时......

我还尝试了以下方法:

<script>
    var elems = document.body.getElementsByTagName("a")[0];
    elems.setAttribute("target","_blank");
</script>

当页面中只有一个标签时...

请告诉我我做错了什么......

谢谢:)

【问题讨论】:

  • 您已将代码嵌入到外部 jQuery 脚本中。你需要两个脚本。一个用于获取 jQuery,另一个用于您的代码。 &lt;script src="static/jquery-3.1.1.js"&gt;&lt;/script&gt; &lt;script&gt; /* your code */ &lt;/script&gt;
  • 第二个代码块应该适用于单个元素,但如果您将脚本放在页面顶部则不会,这将使其在加载任何元素之前运行。
  • 而且不需要 jQuery:for (let link of document.links) { link.target = "_blank" }
  • 非常感谢您...您似乎对html有很多了解...您是否偶然知道为什么当我使用firefox / chrome检查页面并寻找a的目标时( $('a').target 在控制台中)它仍然说未定义......?我应该使用也许 id 的 att 来查看它吗...?
  • 因为$("a") 让jQuery 获取所有&lt;a&gt; 元素,但它返回一个通常称为“jQuery 对象”的容器对象。该对象本身没有 target 属性。它通过数字索引存储每个元素,很像一个数组,所以找到的第一个元素在索引0,第二个在1,依此类推。所以如果你做了$("a")[0].target,你会得到第一个元素的.target

标签: javascript jquery html attributes tags


【解决方案1】:

为网页的所有元素设置属性的正确方法是遍历所有元素并像这样设置属性:

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

如果使用jQuery,设置属性的函数是$(selector).attr(attribute_name,value)

例子:

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

【讨论】:

  • ✔ ✔ ✔ 最佳解决方案
【解决方案2】:

您的脚本中有一些语法错误,请更正代码

<script src="static/jquery-3.1.1.js"></script>
<script>
    $(document).ready(function() {
        $("a").attr("target", "_blank");
    });
</script> 

【讨论】:

  • Thnx 现在可以工作了...只是想知道...您可能知道为什么当我使用 firefox/chrome 检查页面并寻找 a 的目标 ($('a').target在控制台中)它仍然说未定义......?我应该使用也许 id 的 att 来查看它吗...?
  • @Dardar1991 如果您使用的是jquery,那么您应该使用 jquery 语法。并且没有.target() 方法。这就是我们将其用作属性的原因。
【解决方案3】:

首先,你的代码应该是这样的:

$(document).ready(function() {
    $("a").attr("target", "_blank");
});

它确实有效。你可以在这个页面上试试。我不知道你在哪个页面上测试,但我可以猜到你的代码不起作用的原因是你的代码执行后生成了一些链接。您可以如下更改您的代码以避免此问题。

$(document).ready(function() {
    setInterval(function(){
       $("a").attr("target", "_blank");
    },200);
});

你也可以添加一些代码来提高效率。

【讨论】:

    【解决方案4】:

    您实际上不必修改 html,您可以像这样为每个链接添加一个点击处理程序。

    $(document).on('click', 'a', function(e) {
      e.preventDefault();
      window.open(this.href);
    });
    

    【讨论】:

    • 谢谢你的回答也有效,只是我试图了解如何将所有页面标签设置为一个属性默认值(任何属性)
    • 还有一个问题 - 函数接收的 e 参数是否包含任何内容...?就像发送这个/自己一样吗?因为我没有发送任何价值,它仍然有效....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多