我们一起来读书吧 关注:156贴子:3,319
  • 0回复贴,共1

深入浅出 vuejs 9.3.8 - 9.5

只看楼主收藏回复

9.3.8纯文本内容元素的处理
script、style 和textarea 这三种元素叫作纯文本内容元素。只需要把这些文本截取出来并触发钩子函数chars,然后再将结束标签截取出来并触发钩子函数 end。
9.3.9使用栈维护DOM层级
HTML解析器内部其实也有一个栈来维护DOM层级关系:就是每解析到开始标签,就向栈中推进去一个;每解析到标签结束,就弹出来一个。因此,想取到父元素只需要拿到栈中的最后一项即可。
HTML解析器中的栈还有另一个作用,它可以检测出HTML标签是否正确闭合。
9.3.10整合
9.4文本解析器
文本解析器的作用是解析文本,是对HTML解析器解析出来的文本进行二次加工。HTML解析器在解析文本时,并不会区分文本是否是带变量的文本。如果是纯文本,不需要进行任何处理;但如果
是带变量的文本,那么需要使用文本解析器进一步解析。因为带变量的文本在使用虚拟DOM进行渲染时,需要将变量替换成变量中的值。
9.5总结
解析器的作用是通过模板得到AST(抽象语法树)。生成AST的过程需要借助HTML解析器,当HTML解析器触发不同的钩子函数时,我们可以构建出不同的节点。
随后,我们可以通过栈来得到当前正在构建的节点的父节点,然后将构建出的节点添加到父节点的下面。
最终,当HTML解析器运行完毕后,我们就可以得到一个完整的带DOM层级关系的AST。
HTML解析器的内部原理是一小段一小段地截取模板字符串,每截取一小段字符串,就会根据截取出来的字符串类型触发不同的钩子函数,直到模板字符串截空停止运行。


IP属地:北京1楼2025-10-21 10:04回复