【发布时间】:2011-01-15 06:12:05
【问题描述】:
我确定这很简单,但我不知道该怎么做。 如何计算 HTML 页面中 DOM 元素的数量?我想在用户脚本或书签中执行此操作,但我不知道如何开始!
【问题讨论】:
-
您想了解作为 HTML 元素的 DOM 节点或 DOM 节点吗? DOM 包括文本、cmets 和属性等内容作为节点。
标签: javascript firefox dom bookmarklet userscripts
我确定这很简单,但我不知道该怎么做。 如何计算 HTML 页面中 DOM 元素的数量?我想在用户脚本或书签中执行此操作,但我不知道如何开始!
【问题讨论】:
标签: javascript firefox dom bookmarklet userscripts
将此用于Element 节点:
document.getElementsByTagName("*").length
对于任何节点,您都可以像这样扩展Node:
Node.prototype.countChildNodes = function() {
return this.hasChildNodes()
? Array.prototype.slice.apply(this.childNodes).map(function(el) {
return 1 + el.countChildNodes();
}).reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
})
: 0;
};
那么您只需致电document.countChildNodes。
【讨论】:
contentDocument,这将是可能的。只需迭代使用 document.getElementsByTagName("*") 获得的元素并将它们计为 1,然后为每个 iframe 元素节点 (tagName==='IFRAME') 添加其 contentDocument 中的元素数。
// 如果重要的话,您可以使用相同的方法来获取每个标签的计数
function tagcensus(pa){
pa= pa || document;
var O= {},
A= [], tag, D= pa.getElementsByTagName('*');
D= A.slice.apply(D, [0, D.length]);
while(D.length){
tag= D.shift().tagName.toLowerCase();
if(!O[tag]) O[tag]= 0;
O[tag]+= 1;
}
for(var p in O){
A[A.length]= p+': '+O[p];
}
A.sort(function(a, b){
a= a.split(':')[1]*1;
b= b.split(':')[1]*1;
return b-a;
});
return A.join(', ');
}
警报(tagcensus())
【讨论】:
在 JavaScript 中你可以这样做
document.getElementsByTagName("*").length
在 jQuery 中你可以这样做
jQuery('*').length
【讨论】: