关于DOM知识的详细介绍
DOM
我们知道,JavaScript是由ECMAScript + DOM + BOM组成的。ECMAScript是JS中的一些语法,而BOM主要是浏览器对象(window)对象的一些相关知识的集合。而DOM,则是文档对象相关的知识的集合。
我们知道,HTML和JS之间的交互是通过事件实现的。而DOM是针对HTML(XML)文档的一个API。因此,如果我们想实现与用户的交互,那么就需要使用DOM提供的API,获取HTML元素,然后在该元素上绑定相应的事件,实现与用户的交互。所以,对DOM的理解和掌握就显得相当重要。
本文章主要基于《JavaScript高级程序涉及(三)》中的DOM相关章节,对DOM的主要知识作出一个梳理,并穿插我个人的一些理解。
节点层次
写过HTML代码的地球人应该都知道,我们需要给每一个元素添加缩进,然后在书写相关的HTMl标签和内容,最后显示在网页上。因此这种嵌套的HTML代码和内容就构成了节点层次。
对ECMAScript理解的地球人应该都知道,JS中的每一个对象都是基于一个引用类型创建的,而引用类型可以是JS原生提供的引用类型(Array、Function、RegExp、Object等),也可以是自定义的引用类型(通过new关键字调用引用类型(也可以叫构造函数))。而所有对象都是Object的实例对象,都可以继承Object.prototype上的属性和方法
而在DOM中,也同样有这样类似的机制。在DOM中,最顶层的类型是Node类型,其他所有节点都可以继承Node类型下的属性和方法。而Node类型实际上就相当于JS中的Object构造函数。
既然如此,那就线看看Node类型下有哪些属性和方法
Node类型
属性(在某个特定的节点通过继承的方式调用以下属性)
nodeType
nodeName
nodeValue
·············
childNodes(指针,指向NodeList对象)
parentNodes
nextSibling
previousSibling
firstChild
lastChild
ownDocument(每个节点都只能属于一个Document节点)
方法(在某个特定的节点通过继承的方式调用以下方法)
··· 查找节点 ···
查找元素的方法位于Document类型中
························
··· 插入节点 ···
appendChild(ele)
insertBefore(ele, target)
························
··· 删除节点 ···
removeChild(ele)
························
··· 替换节点 ···
replaceChild(ele, target)
························
··· 复制节点 ···
cloneNode(boolean) true: 表示深复制, false: 表示浅复制
························
··· 处理文档节点 ··· 很少用~
normalize()
Node类型上的属性和方法也就那么多了,再啰嗦一次,所有的其他节点都可以继承Node类型上的属性和方法
Document类型
JS通过Document类型表示文档。document对象是HTMLDocument的一个实例,表示整个HTML页面。同时,document对象也是window对象下的一个属性,因此可以将其作为全局对象来访问。
属性
document.documentElement (表示HTML元素),同时可以通过document.childNodes[1]获取HTML元素
document.body (表示body元素)
document.head (表示head元素)
document.compatMode (表示浏览器采用哪种渲染方式,'CSS1Compat'表示标准模式, 'BackCompat'表示混杂模式)
document.charset (表示文档中实际使用的字符集,也可用来指定新字符集)
document.dataset (表示通过dataset访问自定义属性,如document.dataset.myname)
document.docType (表示 元素), 存在浏览器兼容性问题
document.title (表示 < title > 元素)
··· 网页请求 ···
document.URL (获取URL地址)
document.domain (获取URL中的域名,pathname)
document.attributes (获取某个节点的属性,返回NamedNodeMap对象,与NodeList类似)
方法
··· 查找元素 ···
document.getElementById(id) 返回该元素
document.getElementsByTagName(classname) 返回包含零个或多个元素的HTMLCollection对象,与NodeList对象相似
document.getElementsByName(ele)返回带有给定name属性的元素,同样返回HTMLCollection对象
document.getElementsByClassName(className) 返回所有匹配的NodeList对象 (可在Document类型、Element类型上调用该方法)
document.querySelector(selector) selector表示CSS选择符 返回与该模式匹配的第一个元素,如果没有找到,返回null (Document类型, DocumentFragment类型, Element类型都可以调用此方法)
document.querySelectorAll(selector) selector表示CSS选择符 返回一个匹配成功的NodeList对象 (Document类型, DocumentFragment类型, Element类型都可以调用此方法)
··· 创建元素 ···
document.createElement() (创建好的元素处于游离状态,需要通过appendChild插入)
··· 创建文本节点 ···
document.createTextNode() (创建好的元素处于游离状态,需要通过appendChild插入)
··· 确定元素大小 ···
document.getBoundingClientRect()
Element类型
属性
id
title
lang
className
方法
getAttribute(ele) 获取某个属性
setAttribute(name, value) 设置某个属性
removeAttribute(ele) 移除某个属性
getElementsByTagName(ele) 获取标签名为ele的元素
Text类型
属性
nodeValue | data (访问Text节点中的文本)
DocumentFragment类型
用途:离线操作DOM元素,避免DOM节点大量的重排和重绘,造成性能问题
方法
document.createDocumentFragment() (表示创建文档片段)
NodeList对象
理解 NodeList 及其“近亲”NamedNodeMap 和 HTMLCollection,是从整体上透彻理解 DOM 的关键所在。这三个集合都是“动态的”;换句话说,每当文档结构发生变化时,它们都会得到更新。因此,它们始终都会保存着最新、最准确的信息。从本质上说,所有NodeList 对象都是在访问 DOM 文档时实时运行的查询。
元素大小
偏移量(offset dimension)
要想知道某个元素在页面上的偏移量,将这个元素的 offsetLeft 和 offsetTop 与其 offsetParent的相同属性相加,如此循环直至根元素,就可以得到一个基本准确的值。以下两个函数就可以用于分别取得元素的左和上偏移量。
function getElementLeft(element){ var actualLeft = element.offsetLeft; var current = element.offsetParent; while (current !== null){ actualLeft += current.offsetLeft; current = current.offsetParent; } return actualLeft; } function getElementTop(element){ var actualTop = element.offsetTop; var current = element.offsetParent; while (current !== null){ actualTop += current. offsetTop; current = current.offsetParent; } return actualTop; }
客户区大小(client dimension)
要确定浏览器视口大小,可以使用 document.documentElement 或 document.body(在IE7 之前的版本中)的clientWidth 和 clientHeight。
function getViewport(){ if (document.compatMode == "BackCompat"){ return { width: document.body.clientWidth, height: document.body.clientHeight }; } else { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }; } }
滚动大小(scroll dimension)
·················
确定元素大小
document.getBoundingClientRect()方法, 返回一个矩形对象。包含4个属性:left、top、right和bottom。这些属性给出了元素在页面中相对于视口的位置。
以上是关于DOM知识的详细介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

近日,网络中有win10X系统的最新镜像下载流出,不同于常见的ISO,此次的镜像是.ffu格式,目前仅能用于SurfacePro7体验。虽然很多小伙伴不能体验,但是依旧可以看看测评的相关内容,过过瘾,那么一起来看看win10x系统最新评测吧!win10x系统最新评测 1、Win10X与Win10最大的不同首先就表现在开机后开始按钮等被放在了任务栏中央,除了固定的应用程序,任务栏还可以显示最近启动的应用程序,类似于Android和iOS手机。 2、另外一个就是,新系统的“开始”菜单不支持文

前言1950年,图灵发表了具有里程碑意义的论文《计算机器与智能》(ComputingMachineryandIntelligence),提出了一个关于机器人的著名判断原则——图灵测试,也被称为图灵判断,它指出如果第三者无法辨别人类与AI机器反应的差别,则可以论断该机器具备人工智能。2008年,漫威《钢铁侠》中的AI管家贾维斯,让人们知道了AI是如何精准地帮助人类(托尼)解决丢过来的各种事务的……图1:AI管家贾维斯(图片来源网络)2023年初,以2C的方式从科技界火爆破圈的免费聊天机器人Chat

Golang,又称为Go语言,是一种由Google开发的开源编程语言。自2007年发布以来,Golang在软件开发领域逐渐崭露头角,得到了越来越多开发者的青睐。作为一种静态类型、编译型语言,Golang拥有诸多优点,如高效的并发处理能力、简洁的语法、强大的工具支持等,使其在云计算、大数据处理、网络编程等方面具有广泛应用前景。本文将介绍Golang的基本概念、

一、简介知识抽取通常指从非结构化文本中挖掘结构化信息,例如含有丰富语义信息的标签和短语。这在业界被广泛应用于内容理解和商品理解等场景,通过从用户生成的文本信息中提取有价值的标签,将其应用于内容或商品上知识抽取通常伴随着对所抽取标签或短语的分类,通常被建模为命名实体识别任务,通用的命名实体识别任务就是识别命名实体成分并将成分划分到地名、人名、机构名等类型上;领域相关的标签词抽取将标签词识别并划分到领域自定义的类别上,如系列(空军一号、音速9)、品牌(Nike、李宁)、类型(鞋、服装、数码)、风格(

了解Linux服务器安全:必备的知识和技能随着互联网的不断发展,Linux服务器越来越广泛地应用于各个领域。然而,由于服务器存储了大量的敏感数据,其安全性问题也成为了人们关注的焦点。本文将介绍一些必备的Linux服务器安全知识和技能,帮助您保护您的服务器免受攻击。更新和维护操作系统及软件及时更新操作系统和软件是保持服务器安全的重要一环。因为每个操作系统和软件

学习HTML全局属性的必备知识与实践技巧HTML(HyperTextMarkupLanguage)是一种用于创建网页结构的标记语言。在构建网页时,我们常常需要使用各种标签和属性来定义页面的外观与行为。而在所有的HTML属性中,全局属性是一类非常重要的属性,它们可以应用于所有的HTML标签,为网页开发者提供了强大的灵活性和自定义能力。在学习和使用HTML全

毫无疑问,jQuery是前端开发中最常用的JavaScript库之一,它提供了简洁而强大的方法来操作HTML文档。在jQuery中,兄弟节点是指与指定元素有相同父元素的元素。深入了解jQuery兄弟节点的相关知识对于前端开发者来说是至关重要的。本文将介绍如何使用jQuery来操作兄弟节点,并附上具体的代码示例。1.查找兄弟节点在jQuery中,我们可以通过

学习JSP内置对象的必备知识:掌握jsp中的内置对象有哪些,需要具体代码示例JSP(JavaServerPages)是一种动态网页开发技术,其优势在于结合了动态编程语言(如Java)和静态页面的特点。在JSP中,内置对象起着重要的作用,方便开发人员进行数据处理和页面渲染。本文将介绍一些常用的JSP内置对象,同时提供具体的代码示例来加深理解。request对
