HTMLの見出しと強調の要素の数を数える

機会があったので、実行すると alert() で HTML の各要素の (ただしDOMツリー内の) 数を表示する Bookmarklet を作って某所に投稿してみたが、投稿した後に、大文字の要素名を getElementsByTagName() に渡すと、大文字小文字を区別する上に要素名を小文字で書く XHTMLではうまくいかないっぽいことに気づいたので、toLowerCase() を使うように手元では修正したのだが、某所に再投稿するのは気が引けるし、そもそも公開されない懸念があるので、ここに公開する。

javascript:(function() {
  var b = document.body;
  var f = function(arg) { return b.getElementsByTagName(arg); };
  var types = ['*', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'EM', 'STRONG'];
  var ar = [];
  for(var i = 0, l, len = types.length, t; i < len; i++) {
    t = types[i];
    l = f(t.toLowerCase()).length;
    ar.push(t, ' 要素 : ', l, '個 ');
    ar.push('\( 約 ', Math.round(l/(ar[2]?ar[2]:l)*10000)/100, ' \% \)\n');
  }
  ar[0] = 'BODYの子供';
  ar[2]--;
  alert(ar.join(''));
})();