网页DOM编程方法(API总结与应用)

本文详细探讨了网页DOM编程中的Node、Document和Element的关系,总结了常用的DOM API,并通过实例展示了如何运用这些API进行元素操作。内容包括Node节点、Document节点、Element节点的特性和方法,以及CSS盒模型在DOM编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高效优雅是我的创作方式。学习是一个渐进的过程,要把知识串联起来才能解决某一方面的问题。

网页DOM编程

Node、Document和Element三者关系

Node:各种类型的 DOM API 对象会从这个接口继承。

Document:表示在任何在浏览器中加载的网页(DOM树)。

Element:描述所有相同种类的元素所普遍具有的方法和属性。

完整的继承关系如下图:

如果已知它们之间的继承关系,那么就可以知道这些元素会从父类继承什么样的属性和方法。接下来,我们学习这些接口的常用API,然后利用这些API进行DOM编程。

DOM编程常用 API 总结

Node节点

属性方法说明
Node.nodeName 只读返回一个包含该节点名字的DOMString
Node.nodeType只读返回一个与该节点类型对应的无符号短整型的值。
Node.nodeValue返回或设置当前节点的值。
Node.textContent返回或设置一个元素内所有子节点及其后代的文本内容。
Node.firstChild 只读返回该节点的第一个子节点Node,如果该节点没有子节点则返回null
Node.lastChild 只读返回该节点的最后一个子节点Node,如果该节点没有子节点则返回null
Node.previousSibling 只读返回该节点同级的前一个节点 ( Node) ,如果不存在返回 null。
Node.nextSibling 只读返回与该节点同级的下一个节点 Node,如果不存在返回null
Node.parentNode 只读返回一个当前节点 Node的父节点。
Node.childNodes只读返回一个包含了该节点所有子节点的实时的NodeList
Node.appendChild()将指定的 childNode 参数作为最后一个子节点添加到当前节点。
Node.removeChild()移除当前节点的一个子节点,这个子节点必须存在于当前节点中。
Node.replaceChild()将选定的节点替换一个子节点 Node 为另外一个节点。
Node.insertBefore()在当前节点下增加一个子节点 Node,并使该子节点位于参考节点的前面。

nodeName特别说明:

1.元素节点的nodeName是标签名称2.属性节点的nodeName是属性名称3.文本节点的nodeName永远是#text4.文档节点的nodeName永远是#document``nodeValue特别说明:

1.元素节点的nodeValue是null(赋值无效)2.文本节点的nodeValue是文本自身3.属性节点的nodeValue是属性的值Document节点

方法说明
Document.createElement()用给定标签名创建一个新的元素。
Document.createTextNode()创建一个文本节点。
Document.querySelector()返回文档中与指定的选择器匹配的第一个元素节点。
Document.querySelectorAll()返回包含文档中与指定的选择器匹配的所有元素节点的列表(NodeList)。

注意:NodeList不是数组,而是一个类数组对象。可称为DOM集合。它的遍历方法有以下两种方式:

1.利用自带的forEach方法
2.转换成数组形式:Array.from(nodelist)[].slice.call(nodelist)

Element节点

方法说明
Element.getAttribute()返回元素上一个指定的属性值。
Element.setAttribute()设置指定元素上的某个属性值。
Element.removeAttribute()从指定的元素中删除一个属性。
Element.clientWidth 只读返回Number 表示该元素内部的宽度。
Element.clientHeight 只读返回Number 表示内部相对于外层元素的高度。
Element.clientTop 只读返回 Number 表示该元素距离它上边界的高度。
Element.clientLeft 只读返回Number表示该元素距离它左边界的宽度。
Element.scrollWidth 只读返回类型为: Number ,表示元素的滚动视图宽度。
Element.scrollHeight 只读返回类型为: Number,表示元素的滚动视图高度。
Element.scrollTop返回类型为:Number ,表示该元素纵向滚动条距离
Element.scrollLeft返回类型为:Number,表示该元素横向滚动条距离最左的位移。
Element.getBoundingClientRect()返回元素的大小及其相对于视口的位置。

1.在CSS盒模型中,可视区的宽高如下所示:

根据上面的盒模型图,可视区的宽高可有以下计算公式:

offsetWidth = width + padding*2

offsetHeight = width + padding*2

2.当滚动条滚动到底部时,有以下计算公式:

scrollHeight = scrollTop + clientHeight

注意:scrollTop是一个动态值,随着滚动条向下滑动逐渐增加。而clientHeight则是一个静态值。

HTMLELement节点

属性说明
HTMLElement.style获取/设置元素的 style 属性
HTMLElement.offsetWidth只读元素自身可视宽度加上左右 border 的宽度
HTMLElement.offsetHeight 只读元素自身可视高度加上上下 border 的宽度
HTMLElement.offsetTop只读元素自己 border 顶部距离父元素顶部或 body 元素 border 顶部的距离
HTMLElement.offsetLeft只读元素自己 border 左边距离父元素 border 左边或 body 元素 border 左边的距离
HTMLElement.offsetParent只读元素的父元素,如果没有就是 body 元素。若元素脱离文档流,则为null

在CSS盒模型中,偏移量的宽高如下所示:

根据上面的盒模型图,偏移量的宽高可有以下计算公式:

offsetWidth = width +border*2 +padding*2

offsetHeight = width +border*2 +padding*2

DOM编程 API 应用

接下来利用上面的API去实现以下几个步骤。首先考虑这样一个DOM结构,如下:

<div class="list"><ul style="list-style: none; text-align: center; margin: 0px; padding: 0px;"><li style="background-color: green;">1</li><li style="background-color: green;">2</li><li style="background-color: green;">3</li><li style="background-color: green;">4</li></ul>
</div> 

假设这样一个场景,用户点击了某个按键。我们希望能使用JS去生成上面的DOM结构。如下:

<input type="button" value="点击生成列表" onclick="createList()">
<script> const createList = () => {// 创建list,设置class属性。插入body节点末尾let list = document.createElement("div");list.setAttribute("class", "list")document.body.insertBefore(list, null)// 创建ul节点,设置style样式。插入list节点内部let ul = document.createElement("ul");ul.style.listStyle = "none";ul.style.textAlign = "center";ul.style.margin = "0px";ul.style.padding = "0px";list.appendChild(ul);// 创建4个li节点,添加内容并设置style样式。插入ul节点内部let li;for (let i = 1; i <= 4; i++) {li = document.createElement("li");li.style.backgroundColor = "blue";li.textContent = i;ul.appendChild(li);}
} </script> 

按键点击后生成DOM结构如下:

我们总结一下步骤。利用JS生成DOM结构的操作如下:

1.创建元素:Document.createElement()
2.设置属性:Element.setAttribute()
3.添加样式:HTMLElement.style
4.添加内容:Node.textContent
5.插入父节点:Node.appendChild()


最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值