我希望使用此<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;。但页面上有更多结果。
答案 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;
请注意,这还包含area
个href
属性的标记,但我认为您没有这些标记。
答案 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
元素的数量实际上有所不同。