回炉重学HTML / DOM / Element / Node之间的关系

前言

 上个月五一假期写了一篇《从寻呼机到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的样式

// 获取DOM中的div元素

var divElems = document.getElementsByTagName('div');

// 元素操作

// 给第一个div元素加上 bg-red 的样式名称

divElems[0].classList.add('bg-red')

什么是Node

Node是一个接口interface,同时也是继承父接口EventTarget。Node主要描述了节点操作的方法和属性,例如描述了操作父节点parentNode、子节点childNode和兄弟节点previousSibling/nextSibling的操作。

如果把网页比喻成一个摩天大楼

HTML就构成摩天大楼的钢筋混泥土结构

DOM就是构建摩天大楼的包工头

Element是摩天大楼的装修工人。

那么Node就是构建摩天大楼的建筑工人,主要实现结构的操作

// 获取DOM中的div元素

var divElems = document.getElementsByTagName('div');

// 节点操作

// 给第一个div元素里追加一个 span的子节点

var span = document.createElement('span');

divElems[0].appendChild(span);

   

什么是 EventTarget

        EventTarget 是一个事件接口,用于注册和触发事件描述的接口,也是最基本的事件监听器的接口。

如果把网页比喻成一个摩天大楼

HTML就构成摩天大楼的钢筋混泥土结构

DOM就是构建摩天大楼的包工头

Element是摩天大楼的装修工人。

Node就是构建摩天大楼的建筑工人。

那么 EventTarget 就是构建摩天大楼的电力工人,主要是事件的注册和触发。

// 获取DOM中的div元素

var divElems = document.getElementsByTagName('div');

// 事件注册

var event = new Event('myclick');

divElems[0].addEventListener('myclick', function() { 

  alert('hello myclick event')

});

// 广播触发事件

divElems[0].dispatchEvent(event)

总结一下

我们回到前言中的语境里,讨论所谓的jQuery操作HTML/DOM/Element/Node,其实讨论的本质就是JavaScript对DOM的操作。

其中DOM是Element的扩展实现,Element是Node接口的一种实现,而最基本的Node接口是继承于底层的EventTarget事件接口。

DOM里相关事件事件监听和操作是,继承于EventTarget实现的。

DOM里相关属性和内容操作是,继承于Element实现的。

DOM里相关节点操作是,继承于Node实现的。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

触发修改文章时间【fastadmincms开发记录】|fastadmincms二次开发,触发,修改,文章,时间,fastadmin,ms,开发,记录
触发修改文章时间【fastadmincms开发记录】
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】|fastadmincms二次开发,在tp5中,过滤,输入,的零,宽度,字符,fastadmin,ms,开发,记录
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】
处理tag标签中的0宽空格【fastadmincms开发记录】|fastadmincms二次开发,处理,tag,标签,中的,0宽,空格,fastadmin,ms,开发,记录
处理tag标签中的0宽空格【fastadmincms开发记录】
添加专题时tags标签id出错【fastadmincms开发记录】|fastadmincms二次开发,添加,专题,时tags,标签,id,出错,fastadmin,ms,开发,记录
添加专题时tags标签id出错【fastadmincms开发记录】
20230518----模板 广告【fastadmincms开发记录】|fastadmincms二次开发,20230518,模板,广告,fastadmin,ms,开发,记录
20230518----模板 广告【fastadmincms开发记录】
cms添加视频模型【fastadmincms开发记录】|fastadmincms二次开发,ms,添加,视频,模型,fastadmin,开发,记录
cms添加视频模型【fastadmincms开发记录】
新增单篇收费复制功能【fastadmincms开发记录】|fastadmincms二次开发,新增,单篇,收费,复制,功能,fastadmin,ms,开发,记录
新增单篇收费复制功能【fastadmincms开发记录】
添加开会员折扣功能【fastadmincms开发记录】|fastadmincms二次开发,添加,开会,折扣,功能,fastadmin,ms,开发,记录
添加开会员折扣功能【fastadmincms开发记录】

历史上的今天:04月28日

FastAdmin-CMS模版制作(4)-通用引入

FastAdmin-CMS模版制作(4)-通用引入一、通用引入文件1.在模版文件夹内新建一个common文件夹,在commn文件夹内新建layout.html文件,改文件为整个站点结构的通用文件(文件夹和文件可以根据自己喜好进行命名,并没有强制要求),对模版文件夹不熟悉的请阅读上一章。image.png2.抽出网站的通用头部;底部;公用引入css、js、image代码,这里的通用是指在每个页面上都

解疑:rel=”pingback“ 有什么用?

解疑:rel=”pingback“ 有什么用?wp 中如下link 到底有什么用?<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">PingBack声明是什么?Pingback是博客中用来通知其他网志系统文章被引用情况的一种手段。它出现完全

DNS 预解析

DNS Prefetch 应该尽量的放在网页的前面,推荐放在<meta charset="UTF-8">后面。具体使用方法如下<metahttp-equiv="x-dns-prefetch-control"content="on"><linkrel="dns-prefetch"href=&

dns-prefetch是什么 前端优化:DNS预解析提升页面速度

dns-prefetch是什么 前端优化:DNS预解析提升页面速度在网页体验中我们常会遇到这种情况,即在调用百度联盟、谷歌联盟以及当前网页所在域名外的域名文件时会遇到请求延时非常严重的情况。那么有没有方法去解决这种请求严重延时的现象呢目录诞生背景Dns请求虽然占用了很少的带宽,但会有很高的延迟,由其以移动网络会更加明显。通过dns预解析技术可以很好的降低延迟在firefox上使用dns-prefe

热门专题

弥勒综合高中|弥勒综合高中
弥勒综合高中
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
云南网站建设|云南网站制作,网站建设,云南网站开发,云南网站设计,云南网页设计,云南网站建设公司,云南网站建设
云南网站建设
综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
大理科技管理学校|大理科技管理中等职业技术学校,大理市科技管理中等职业技术学校
大理科技管理学校

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部