2016-12-14 79 views
-2
标签元素

HTML集团通过使用Javascript

<html> 
    <head></head> 
    <body> 
     <p></p> 
     <p></p> 
     <div></div> 
     <div></div> 
     <div></div> 
    </body> 
</html> 

JS

document.getElementsByTagName("*").length // 8 

如何计算每个标签名称数量(在SQL类似于GROUP BY),以获得对象这样:

{ 
    html: 1 
    head: 1 
    body: 1 
    p: 2 
    div: 3 
} 

我可以得到导致许多代码行,但也许只能在几行代码中才能做到这一点?

+1

那你试试? –

回答

2

你可以使用返回NodeListtagName财产和计数

var count = {}; 
 

 
Array.prototype.forEach.call(document.getElementsByTagName("*"), function (a) { 
 
    count[a.tagName] = (count[a.tagName] || 0) + 1; 
 
}); 
 

 
console.log(count);

+0

我快要学ES6了!大声笑。你总是摇滚! –

+3

它仍然是ES5。 –

+0

* double facepalm * –

1

你可以做到这一点,

var result = {}; 
 

 
[...document.getElementsByTagName("*")].forEach(function(itm) { 
 
    var tag = itm.tagName; 
 
    this[tag] = this[tag] || 0; 
 
    this[tag]++; 
 
}, result); 
 

 
console.log(result);

如果您的环境不支持spread运算符,那么在使用forEach之前,将nodeList手动转换为数组。或者我们可以用传统的for()循环来编写它。

var result = {}, tag; 
 
var elems = document.getElementsByTagName("*"); 
 

 
for(var i=0;i<elems.length;i++){ 
 
    tag = elems[i].tagName; 
 
    result[tag] = result[tag] || 0; 
 
    result[tag]++; 
 
} 
 

 
console.log(result);