私が求めている最終結果は、HTMLドキュメントで使用されているタグ名のリストを含むJavaScript配列です。
div、span、section、h1、h2、pなど..
リストを明確にしたいのです<head>
が、ドキュメント内のタグには興味がありません(ただし、パフォーマンスを重視している場合は、タグを除外することができます)。
これはIE6、7、および8で機能する必要があり、jqueryを使用したくありません。
これを行う最も効率的な方法は何でしょうか?
私が求めている最終結果は、HTMLドキュメントで使用されているタグ名のリストを含むJavaScript配列です。
div、span、section、h1、h2、pなど..
リストを明確にしたいのです<head>
が、ドキュメント内のタグには興味がありません(ただし、パフォーマンスを重視している場合は、タグを除外することができます)。
これはIE6、7、および8で機能する必要があり、jqueryを使用したくありません。
これを行う最も効率的な方法は何でしょうか?
あなたが探しているのはdocument.all.tagName
、頭のてっぺんでは、このような for ループがそれを行うはずです (そのリストで不要なタグをフィルタリングする場合)
for(i = 0; i < document.all.length; i++)
{
console.log(document.all[i].tagName);
}
クロスブラウザのソリューションは次のとおりです。
var tags = {}; // maintains object of tags on the page and their count
var recurse = function(el) {
// if element node
if(el.nodeType == 1) {
if(!tags[el.tagName])
tags[el.tagName] = 0;
tags[el.tagName]++;
}
// recurse through the children
for(var i = 0, children = el.childNodes, len = children.length; i < len; i++) {
recurse(children[i]);
}
}
recurse(document);
// if you want just what's in the body(included)
var bodies = document.getElementsByTagName("body");
for(var i = 0; i < bodies.length; i++)
recurse(bodies[i]);
ドキュメント内のタグ名の一意のリストを、IE6および同等のすべてのブラウザーで機能する配列として取得するには:
function listTagNames() {
var el, els = document.body.getElementsByTagName('*');
var tagCache = {};
var tagname, tagnames = [];
for (var i=0, iLen=els.length; i<iLen; i++) {
tagname = els[i].tagName.toLowerCase();
if ( !(tagname in tagCache) ) {
tagCache[tagname] = tagname;
tagnames.push(tagname);
}
}
return tagnames;
}
タグ名と同じ継承オブジェクトプロパティがあると思われる場合は、次のpropertyIsEnumerable
テストを使用してください。
if (!tagCache.propertyIsEnumerable(tagname)) {
したがって、Safari<2でも機能します。
ドキュメント内のすべてのタグ名、一意、クロスブラウザー、プレーンjsを取得します。
var els = document.getElementsByTagName('*'), tags = [], tmp = {}
for (var i=0;i<els.length;i+=1){
if (!(els[i].tagName in tmp)){
tags.push(els[i].tagName);
tmp[els[i].tagName] = 1;
}
}
使用する
if (!(els[i].tagName in tmp)
&& !/head/i.test(els[i].parentNode.tagName)
&& !/html|head/i.test(els[i].tagName))
を除外するには<head>