如何从a获取属性

时间:2012-02-25 06:39:58

标签: javascript

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=7487871339000666216" />

如何在不使用任何JavaScript库的情况下获取此链接标记的href属性?

现在我正在使用下面的代码来实现这个目标,但我想知道是否有更简单的解决方案。

var links = document.getElementsByTagName("link");
for (i in links){
    var title = links[i].getAttribute("title");
    if ( title == "RSD"){
        var href = links[i].getAttribute("href");
        break;
    }
}

4 个答案:

答案 0 :(得分:35)

现代浏览器支持querySelector()querySelectorAll()

document.querySelector("link[title=RSD]").getAttribute("href");

请参阅browser support chart

答案 1 :(得分:7)

原始代码:

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=7487871339000666216" />

...

var links = document.getElementsByTagName("link");
for (i in links){
  var title = links[i].getAttribute("title");
  if ( title == "RSD"){
    var href = links[i].getAttribute("href");
    break;
  }
}
  1. 上面的标记为a link element, not a "link tag"

  2. 没有“javascript”,there are several different ECMAScript implementations.“javascript”一词具有误导性,不应用作这些编程语言的总称。

    在Web浏览器中不能有“纯javascript”,这是一个主机环境。即使document指的是主机( - 提供)对象,它也不属于任何核心语言(ECMAScript Language Specification, 5.1 Edition [ECMA-262-5.1],第4节)。< / p>

  3. 始终声明您的标识符(i未声明)。不声明它们,从而不将它们附加到执行上下文,具有从泄漏到调用执行上下文到运行时错误的副作用。因此,此类代码不会在ECMAScript Ed中运行。 5.x严格模式,它抛出ReferenceError例外(ECMA-262-5.1,第12.6.4和8.7.2节)。

  4. 切勿将for - in语句与类似数组的对象一起使用,特别是在测试之外,不使用主机对象(links引用一个)。既不保证只考虑数字属性名称也不保证迭代顺序(ECMA-262-5.1,第12.6.4节)。

  5. DRY:避免两次访问同一属性(您访问links[i]两次)。否则结果将是程序中的更大变体(对象可能在此期间发生了变化),并且该方法效率低,难以维护,不必要。

  6. 避免调用元素对象的getAttribute()setAttribute()方法,而是访问attribute properties that have getters and setters。前者不太向后兼容,并且已知不可靠,特别是在MSHTML / IE中,属性值和属性属性值之间没有适当的区别。

    var links = document.getElementsByTagName("link");
    for (var i = 0, len = links && links.length; i < len; ++i)
    {
      var link = links[i];
      if (link.title == "RSD")
      {
        var href = link.href;
        break;
      }
    }
    
  7. 如果要快速引用元素(但也考虑使用主机提供的集合),请使用id属性和document.getElementById()方法:

    <link rel="EditURI" type="application/rsd+xml" title="RSD"
          href="http://www.blogger.com/rsd.g?blogID=7487871339000666216"
          id="mylink" />
    

    ...

    var link = document.getElementById("mylink");
    var href = link && link.href;
    
  8. 除非必须(删除尾部斜杠,如果它仍然有效,请参阅W3C Validator),否则不要使用XHTML(语法)。特别是LINK元素必须位于HEAD元素中,这是HTML 4.01版本中具有no standardized remedy的语法错误。 HTML5 specifies it但这仍然是工作草案,not yet fully implemented in user agents

  9. 只说“螺丝$浏览器”而自称满足的人没有足够的专业经验(参见例如The Internet Explorer 6 Countdown, by Microsoft,其中仍然显示大量[目前为25.1%]的IE 6用户在新兴市场)。建议您忽略前一组关于此主题的内容。

答案 2 :(得分:-1)

是的,通过提供ID标签。 http://jsfiddle.net/Lc7ut/

答案 3 :(得分:-3)

你可以使用JQuery:

var url = $('link[rel=canonical]').attr("href");