获取网站的所有href属性

37

请问有没有办法使用JavaScript获取网站中所有href属性(链接)?如果您能给我一个代码示例,我将不胜感激。

4个回答

77
你可以使用document.links来获取锚点,然后通过循环来提取href,像这样:
var arr = [], l = document.links;
for(var i=0; i<l.length; i++) {
  arr.push(l[i].href);
}
//arr is now an array of all the href attributes from the anchors in the page

你可以在这里测试,如果需要的话,在对数组调用.push()之前可以更多地筛选它,但这就是获取链接并循环的概念。


1
如何在不加载网页的情况下获取其链接?(基本上我想做的是这样。用户输入一个URL,我想加载该URL中所有可用的链接。)请问是否有实现此功能的方法? - netha
1
不,我没有使用任何框架。我希望在客户端完成它(我认为在服务器端进行一些操作会给服务器带来更大的负担)。我只需要一种方法来做到这一点。如果框架能够完成工作,我甚至愿意学习它。我该如何实现这个? - netha
1
@netha - 你获取的页面是在你的域名上还是其他地方?如果它们在其他地方,由于安全限制,你别无选择,只能在服务器端进行操作。 - Nick Craver
1
它们不在我的领域。如果没有其他方法,那么我想我必须在服务器端完成它,对吗?你知道有没有从服务器端完成它的方法? - netha
1
我正在使用WAMP服务器,因此我认为我在Apache平台上。 - netha
显示剩余3条评论

15

这里是使用 getElementsByTagName 的一种方法:

var links = document.getElementsByTagName('a');

for(var i = 0; i< links.length; i++){
  alert(links[i].href);
}

如果页面有更多的链接,请不要执行此操作,因为它会弹出 i(比如50)次警告。 - abdul rashid

3

使用:

var anchors = document.getElementsByTagName('a');
var hrefs = [];
for(var i=0; i < anchors.length; i++){
  if(1/* add filtering here*/)
    hrefs.push(anchors[i].href);
}

2

一种简单的方法是使用document.getElementsByTagName函数。例如:

document.getElementsByTagName('a');

更新

有一种更简单的方法,请参见 @Nick Craver 的答案


我认为这并不是最简单的 :) - Nick Craver
@Nick:收到。修改为“一个简单的”。 :) - Manoj Govindan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接