Open chenshenhai opened 5 years ago
个人觉得这个抽象不准确 HTML 只是协议,协议不应该对应上具体的 “钢筋结构” 的
个人觉得这个抽象不准确 HTML 只是协议,协议不应该对应上具体的 “钢筋结构” 的
哈哈,多谢的指教,我这里的HTML
描述有点歧义,应该是 HTML标记
个人觉得这个抽象不准确 HTML 只是协议,协议不应该对应上具体的 “钢筋结构” 的
哈哈,多谢的指教,我这里的
HTML
描述有点歧义,应该是HTML标记
嗯嗯,是的~ HTML标记
比较恰当
前言
上个月写了一篇《从寻呼机到jQuery,一枚jQuery钉子户的独白》后,引起和技术小伙伴们的对HTML操作的讨论。
A君:
jQuery
直接操作HTML
,让项目代码很难维护。B君:
React
/Vue
来管理DOM
和抹平DOM
的操作,让开发者可以专注前端功能的实现。C君: 用
jQuery
不能让页面的节点Node
变化方便可控。D君: 元素
Element
操作还是交给有模板能力的框架来操作。讨论过后我回想对话,感觉有哪些不对,
HTML
,DOM
,Node
和Element
在交谈中各种混用,到底讨论是否是同一个问题呢,抱着这个心态我查了MDN
文档,算是初步理清楚了以上几个名词的含义。什么是HTML
说起这个,应该很多人都很熟悉,就是
HyperText Markup Language
的缩写,翻译过来就是超文本标记语言
。HTML
是用来描述网页的结构,如果把网页比喻成一个摩天大楼,那么HTML
就是构成摩天大楼的钢筋混泥土结构
。同时一个
HTML
网页,可以描述成一个文档Document
什么是DOM
DOM
,是Document Object Model
的缩写,也就是文档对象模型,是对HTML
构成网页文档的一种对象描述。换句话说,DOM
是用于脚本程序(例如JavaScript
)操作HTML网页的对象模型。DOM
已经实现了对HTML
的节点操作、属性操作、事件操作和内容操作等接口和方法。可以这么说,所有对HTML
进行动态脚本(例如JavaScript
)的操作,都是对DOM
的操作如果把网页比喻成一个摩天大楼
HTML
就构成摩天大楼的钢筋混泥土结构
DOM
就是构建摩天大楼的包工头
,做着管理操作HTML
的事情。DOM
最常见的接口例如document.getElementsByName('body')
,查找整个DOM tree
元素里的body
元素什么是Element
Element
,通常称为“元素”,是对接口Node
实现,是所有文档对象(DOM
)的基类。Node
的接口操作,例如节点的增删改查。className
和attribute
操作。如果把网页比喻成一个摩天大楼
HTML
就构成摩天大楼的钢筋混泥土结构
DOM
就是构建摩天大楼的包工头
Element
是摩天大楼的装修工人
,主要实现DOM
中样式和内容的操作例如操作
DOM
的样式什么是Node
Node
是一个接口interface
,同时也是继承父接口EventTarget
。Node
主要描述了节点操作的方法和属性,例如描述了操作父节点parentNode
、子节点childNode
和兄弟节点previousSibling/nextSibling
的操作。如果把网页比喻成一个摩天大楼
HTML
就构成摩天大楼的钢筋混泥土结构
DOM
就是构建摩天大楼的包工头
Element
是摩天大楼的装修工人
。Node
就是构建摩天大楼的建筑工人
,主要实现结构的操作什么是 EventTarget
EventTarget
是一个事件接口,用于注册和触发事件描述的接口,也是最基本的事件监听器的接口。如果把网页比喻成一个摩天大楼
HTML
就构成摩天大楼的钢筋混泥土结构
DOM
就是构建摩天大楼的包工头
Element
是摩天大楼的装修工人
。Node
就是构建摩天大楼的建筑工人
。EventTarget
就是构建摩天大楼的电力工人
,主要是事件的注册和触发。总结一下
我们回到
前言
中的语境里,讨论所谓的jQuery
操作HTML
,其实本质就是JavaScript
对DOM
的操作。其中
DOM
是Element
的扩展实现,Element
是Node
接口的一种实现,而最基本的Node
接口是继承于底层的EventTarget
事件接口。DOM
里相关事件事件监听和操作是,继承于EventTarget
实现的。DOM
里相关属性和内容操作是,继承于Element
实现的。DOM
里相节点操作是,继承于Node
实现的。参考资料