构建DOM树

647 阅读1分钟

为什么要构架DOM树?

因为浏览器无法直接理解和使用HTML,所以要转成DOM树,浏览器才能使用。

HTML解析器:接收到HTML字节流时,首先要经过渲染引擎的HTML解析器,将HTML字节流转换成DOM树结构。

一、将接收的字节流根据文件的指定编码,转换成HTML元素

渲染引擎刚开始接收到的时一堆字节流,如下:

3C 62 6F ...

需要将上面字节流转成这样:

<html>
<body>
    <div>
    koala
        <p>
        程序员成长指北
        </P>
    </div>
</body>
</html>

二、分词器将转化后的数据转换成Token

分词器会将上面转换后的数据转成Token,Token的类别有:Tag Token和文本Token。

三、根据Token生成DOM树

HTML解析会维护一个Token栈。

  • HTML解析器在刚开始时,会默认创建一个根节点为document的空DOM结构,并将startTag document的token压入栈中。
  • 当遇到文本Token时,会向DOM结构中添加一个文本节点,但不会放入栈中。
  • 当遇到一个startTag token,会创建一个响应的dom节点,插入DOM结构中,并且将startTag token压入栈中。
  • 当遇到一个endTag token时,HTML解析器会查看栈顶的token,是不是其对应的startTag token,如果是,则弹出,表示该元素已经解析完了。

直到最后document的endTag token出栈,整个文件就算解析完了。