【问题标题】:Retrieving links from webpage using javascript使用javascript从网页中检索链接
【发布时间】:2014-10-31 09:39:01
【问题描述】:

我是 javascript 新手,只是尝试从网页中提取链接,所以我正在执行以下操作:

for(link in document.links) { 
   console.log(link.getAttribute("href");
}

但如果我这样做:

document.links.item(0).getAttribute("href")

它返回第一个href的链接

我做错了什么?

这是我正在测试的网页:http://en.wikipedia.org/wiki/JavaScript_syntax

【问题讨论】:

    标签: javascript hyperlink


    【解决方案1】:

    只需通过标签名称和avoid the for in loop获取元素。

    var links = document.getElementsByTagName('a'),
        i;
    
    for(i = 0; i < links.length; i += 1){
        console.log(links[i].getAttribute("href"));
    }
    

    Example Here


    对于您的示例,您将使用:

    for(link in document.links) { 
       console.log(document.links[link].getAttribute("href"));
    }
    

    虽然这在技术上是可行的,但除了链接元素之外,它还会返回原型属性。这将引发错误,因为 .getAttribute("href") 不适用于所有返回元素。

    您可以使用hasOwnProperty() 方法并检查.. 但我还是要avoid the for in loop

    for (link in document.links) {
        if (document.links.hasOwnProperty(link)) {
            console.log(document.links[link]);
        }
    }
    

    【讨论】:

    • 您的回答对我也很有帮助。谢谢!
    【解决方案2】:

    在您的代码中,您正在访问第 0 项并且仅从中获取 href。因此,您只会获得一个链接。

    您可能想要做的是一次获取所有链接的 href

    var hrefs = [], i
    for (i=0;i<document.links.length;++i) {
        hrefs.push(document.links.item(i).getAttribute('href'))
    }
    

    那么你的 hrefs 数组将包含所有的 url

    【讨论】:

      【解决方案3】:
      document.links.item
      

      是一个项目数组。

      document.links.item(0) 获取该数组中的第一项。

      document.links.item(1) 获取该数组中的第二项。

      要回答您的问题,您做错了什么是您没有像在第一个示例中那样循环 links.item 数组。

      【讨论】:

      • 所以 document.links 不是迭代返回 document.links 中的每个链接?
      • 没有。只有 for 循环才会迭代。然而,document.links.item 确实可以一次为您提供整个项目集合。但是 document.links.item.getAttribute("href") 将是未定义的,因为 getAttribute() 不是数组的函数。
      • 我明白了,现在说得通了。 document.links 没有返回链接对象,因此没有可用的 getAttribute() 函数。所以我需要返回document.links.items来获取每个链接对象。
      • @inquisitor 正确。就像你一开始做的那样。不过,我想建议乔希的答案:)
      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 2018-07-21
      • 2019-04-25
      • 2012-09-17
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多