2016-12-14 95 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);