0

私が求めている最終結果は、HTMLドキュメントで使用されているタグ名のリストを含むJavaScript配列です。

div、span、section、h1、h2、pなど..

リストを明確にしたいのです<head>が、ドキュメント内のタグには興味がありません(ただし、パフォーマンスを重視している場合は、タグを除外することができます)。

これはIE6、7、および8で機能する必要があり、jqueryを使用したくありません。

これを行う最も効率的な方法は何でしょうか?

4

4 に答える 4

2

あなたが探しているのはdocument.all.tagName 、頭のてっぺんでは、このような for ループがそれを行うはずです (そのリストで不要なタグをフィルタリングする場合)

for(i = 0; i < document.all.length; i++)
{
  console.log(document.all[i].tagName);
}
于 2012-10-18T05:11:10.487 に答える
1

クロスブラウザのソリューションは次のとおりです。

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]);
于 2012-10-18T05:21:07.623 に答える
0

ドキュメント内のタグ名の一意のリストを、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でも機能します。

于 2012-10-18T05:56:46.267 に答える
0

ドキュメント内のすべてのタグ名、一意、クロスブラウザー、プレーン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>

于 2012-10-18T05:58:12.453 に答える