统计所有<a> on html page</a>

时间:2014-02-16 13:28:11

标签: javascript html

我希望使用此<a>方法从Html页面获取所有JavaScript代码:

function() {
    var links = document.getElementsByTagName('a');
    var i=0;
    for (var link in links){i++;}
    return i;
}

我注意到它没有返回正确数量的标签。

知道可以解决什么问题吗?

是否有任何其他方法可以获得Html中的所有href?

修改

我在这个html上尝试了这个方法:http://mp3skull.com/mp3/nirvana.html。 我得到了这个结果:&#34; 1&#34;。但页面上有更多结果。

7 个答案:

答案 0 :(得分:7)

这里不需要循环。您可以阅读length属性。

function getACount() {
    return document.getElementsByTagName('a').length;
}

答案 1 :(得分:2)

您不必为了计算它们而遍历所有这些。 HTMLCollection s(getElementsByTagName返回的对象类型具有.length属性:

$countAnchors = function () {
    return document.getElementsByTagName('a').length;
}

答案 2 :(得分:2)

使用getElementsByTagName("a")将返回所有锚标记,而不仅仅是链接的锚标记。锚标记需要href属性的值作为链接。

使用links property可能会更好,它会返回页面中的链接:

var linkCount = document.links.length;

请注意,这还包含areahref属性的标记,但我认为您没有这些标记。

答案 3 :(得分:2)

更新也获取href

你可以这样做

var linkCount = document.body.querySelectorAll('a').length,
    hrefs= document.body.querySelectorAll('a[href]');

编辑请参阅下面的评论,感谢ttepasse

答案 4 :(得分:0)

你忘记的是length属性。我认为代码将是:

var count = 0;
for (var i = 0; i < links.length; i++) {
  count++;
}
return count;

或者它会是:

for each (var link in links) {
  i++;
}

length用于确定或计算结果元素的总数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for(For Loop)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in(Foreach Loop)

答案 5 :(得分:0)

我会将它们转换为一个数组然后切片等等。

var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
    array.push(links[i].href);
}
var hrefs = array.length;

答案 6 :(得分:0)

问题中的JavaScript代码可以这样工作,或者更确切地说,可以用来创建一个工作解决方案(它现在只是一个匿名函数声明)。它可以被更简单的代码替换,只需使用document.getElementsByTagName('a').length,就像其他人所说的那样。

然而问题是你如何使用它:放置它的位置以及它的执行时间。如果在仅解析了一个a元素的位置运行代码,则结果为1.需要在解析所有a元素时执行该代码。确保这一点的一种简单方法是将代码放在文档正文的末尾。我通过获取所提到页面的本地副本进行测试,并在文档正文末尾的其他script元素之前添加了以下内容:

<script>
var f = function() {
    var links = document.getElementsByTagName('a');
    var i=0;
    for (var link in links){i++;}
    return i;
};
alert('a elements: ' + f());
</script>

即使在同一浏览器上重复加载页面,结果也不一致,但这可能是由页面上的某些动态引起的,导致a元素的数量实际上有所不同。