document中有一个HTML和一个html?这是怎么出现的?

新手上路,请多包涵

今天遇到这样一道题
完成以下功能:任意打开一个网页如新浪或者百度,写一段js代码找到网页中所有以h或者H开头的元素,并打印每种元素的个数,如网页中含有head, hr 和 h2 元素,那么打印出类似如下的结果:

{

hr: 3,

h2: 2,

head: 1

}
我的代码如下

function find(node,map = {}){
    let tagName = node.nodeName;
    let first = tagName.slice(0,1);
    if( first=='H'|| first == "h"){
        if(map[tagName]){
            map[tagName]++;
        }else{
            map[tagName] = 1;
        }
    }
    let children = node.childNodes;
    if(children){
        for(let i = 0;i < children.length; i++){
            find(children[i],map);
        }
    }
    return map;
}
console.log(find(document));

我随便找了一个网页输出结果如下:

{html: 1, HTML: 1, HEAD: 1, H3: 2}

问题
为什么会有一个HTML和一个html呢,正常代码结构中不是只应该有一个html吗?
请问这个HTML是什么,怎么出现的?

阅读 2.7k
3 个回答

打印看document.childNodes有两个,nodeName一个是html,一个是HTML <!DOCTYPE html>

新手上路,请多包涵

function statics() {

  let obj = {};
  document.querySelectorAll('*').forEach(function (element, index) {
    const nodeName = element.nodeName;
    if (nodeName.toLowerCase().indexOf("h") === 0) {
      if (obj[nodeName]) {
        obj[nodeName]++;
      } else {
        obj[nodeName] = 1;
      }
    }

  })

  return obj;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏