DOM操作将所有页面元素存为一个{key:count}的结构,即统计在页面中每种元素的数量,将元素根据count进行排序

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div class="">
      <ul>
        <li></li>
        <li></li>
      </ul>
    </div>
    <script type="text/javascript">
      var allobj = document.getElementsByTagName('*')
      var arr = []
      for (var i = 0; i < allobj.length; i++) {

        for (var j = 0; j < arr.length; j++) {
          console.log('aa');
          console.log(allobj[i].tagName.toLowerCase());
          if(!arr[j].allobj[i].tagName.toLowerCase()){
            var key = allobj[i].tagName.toLowerCase()
            arr.push({key:1})
          }else{
            arr[j].allobj[i].tagName.toLowerCase() ++
          }

        }
      }
    </script>
  </body>
</html>

我想写成 [{},{}]形式 本来想通过第二个循环 让数组中的{}不重复 但 arr.length问题 无法执行第二个循环 诸位有什么好方法解决吗
或是其他方法解决题目

阅读 1.6k
3 个回答

看你问了好几个问题,我个人还是希望你能自己多百度下。

var allobj = document.getElementsByTagName('*')
var arr = [];
var pos = {};
var keyName = "";
for (var i = 0; i < allobj.length; i++) {
    keyName = allobj[i].tagName.toLowerCase();
    if(pos[keyName] === undefined){
        pos[keyName] = arr.push([keyName, 1]) - 1;
    }else{
        ++arr[pos[keyName]][1];
    }
}
arr.sort(function(a,b){ return a[1] - b[1]; }).map(item=> { return {[item[0]]:item[1]} })

不是很好,结果基本实现了

 var allobj = document.getElementsByTagName('*')
      var obj = {},arr=[];
      for (var i = 0; i < allobj.length; i++) {
        let eleName=allobj[i].tagName.toLowerCase();
        obj[eleName]!=undefined?obj[eleName]++:obj[eleName]=1;      
      }
      
    // for(let key in obj){arr.push(JSON.parse('{"'+key+'":'+ obj[key]+'}'));}
    for(let key in obj){arr.push({[key]:obj[key]});}
      console.log(arr);
function getAllHTMLTags() {
  const mapper = {};
  const tags = [...window.document.querySelectorAll("*")].map(
    dom => dom.tagName
  );
  for (let i = 0; i < tags.length; i++) {
      const tag = tags[i];
      if (mapper[tag] === void 0) {
          mapper[tag] = 1;
      }
      else mapper[tag] += 1;
  }

  return Object.entries(mapper).sort((a, b) => b[1] - a[1]).map(q => q[0]);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题