热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目录网页DOM编程Node、Document和Element三者关系DOM编程常用API总结DOM编程API应用网页DOM编程Node、Document和Element三者关系No

目录



  • 网页DOM编程

    • Node、Document和Element三者关系

    • DOM编程常用 API 总结

    • DOM编程 API 应用




网页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永远是#text



  4. 文档节点的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



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

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结构,如下:



  • 1

  • 2

  • 3

  • 4



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


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



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



  1. 创建元素:Document.createElement()

  2. 设置属性:Element.setAttribute()

  3. 添加样式:HTMLElement.style

  4. 添加内容:Node.textContent

  5. 插入父节点:Node.appendChild()




参考

MDN-Node




推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 利用 Zend Framework 实现高效邮件发送功能 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • DRF框架中Serializer反序列化验证机制详解:深入探讨Validators的应用与优化
    在DRF框架的反序列化验证机制中,除了基本的字段类型和长度校验外,还常常需要进行更为复杂的条件限制校验。通过引入`validators`模块,可以实现自定义校验逻辑,如唯一字段校验等。本文将详细探讨`validators`的使用方法及其优化策略,帮助开发者更好地理解和应用这一重要功能。 ... [详细]
  • 在使用 jQuery 的 `html()` 方法时,我发现了一个奇怪的现象:该方法无法完整地插入指定的字符串内容。具体来说,当尝试插入较长或包含特殊字符的字符串时,部分内容可能会被截断或丢失。这一问题可能与 jQuery 对字符串的处理方式有关,建议在实际应用中进行充分测试以确保数据完整性。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 本文详细解析了JavaScript中节点属性的应用,包括如何通过标签、属性和文本节点来获取和操作DOM元素。具体介绍了`nodeType`属性,其中1表示元素节点,2表示属性节点,3表示文本节点。此外,还探讨了`nodeName`和`nodeValue`等重要属性的使用方法及其在实际开发中的应用场景。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 深入解析InnoDB中的多版本并发控制机制
    多版本并发控制(MVCC)是InnoDB存储引擎中的一项关键技术,通过维护数据在不同时间点的多个版本,确保了事务的隔离性和一致性。每个读取操作都能获得一个与事务启动时一致的数据视图,从而提高了并发性能并减少了锁竞争。此外,MVCC还支持多种隔离级别,如可重复读和读已提交,进一步增强了系统的灵活性和可靠性。 ... [详细]
author-avatar
mobiledu2502853033
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有