深入理解 JavaScript DOM 操作

2024-09-04 01:28

本文主要是介绍深入理解 JavaScript DOM 操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、DOM 操作分类

(一)元素查找

  1. 根据 ID 值查找:getElementById(),返回符合条件的第一个对象。
        var aa = document.getElementById("aa");console.log(aa);
  1. 根据类名查找:getElementsByClassName(),返回符合条件的对象组成的数组。
        var arr = document.getElementsByClassName("aa");console.log(arr);
  1. 根据元素名称查找:getElementsByTagName(),返回符合条件组成的数组。
        var arr = document.getElementsByTagName("div");console.log(arr);console.log(arr.length);
  1. 根据选择器查找:querySelector()返回符合条件的第一个对象;querySelectorAll()返回所有符合条件的对象组成的数组。
        var obj = document.querySelector(".aa");console.log(obj);var allObjs = document.querySelectorAll(".aa");console.log(allObjs);

(二)关系查找

  1. 找父亲:parentElementparentNode
        var childElement = document.querySelector(".child");var parent = childElement.parentElement;console.log(parent);
  1. 找孩子:childNodeschildren
        var parentElement = document.querySelector(".parent");var childNodes = parentElement.childNodes;console.log(childNodes);var children = parentElement.children;console.log(children);
  1. 第一个孩子:firstChild
        var parentElement = document.querySelector(".parent");var firstChild = parentElement.firstChild;console.log(firstChild);
  1. 最后一个孩子:lastChildlastElementChild
        var parentElement = document.querySelector(".parent");var lastChild = parentElement.lastChild;console.log(lastChild);var lastElementChild = parentElement.lastElementChild;console.log(lastElementChild);
  1. 找上一个元素:previousElementSiblingpreviousSibling
        var currentElement = document.querySelector(".current");var previousElement = currentElement.previousElementSibling;console.log(previousElement);var previousSibling = currentElement.previousSibling;console.log(previousSibling);
  1. 找下一个元素:nextElementSiblingnextSibling
        var currentElement = document.querySelector(".current");var nextElement = currentElement.nextElementSibling;console.log(nextElement);var nextSibling = currentElement.nextSibling;console.log(nextSibling);

(三)元素修改

  1. 修改内容:innerHTML会把里面的内容解析,innerText会把引号内的内容当成文本处理,value可修改input里的值。
        var obj = document.querySelector(".aa");obj.innerHTML = "<h1>帅哥</h1>";obj.innerText = "<h1>帅哥</h1>";var inputElement = document.querySelector("input");inputElement.value = "new value";
  1. 修改属性:原生属性可通过对象。属性 = 值的方式修改,自定义属性可通过setAttribute设置、getAttribute获取。
  1. 修改样式:可以通过对象.style. 属性 = 值、对象.style.cssText=""、修改对象的className属性结合 CSS 来达到修改样式的目的。
        var obj = document.querySelector(".aa");obj.style.background = "red";obj.style.cssText = "background:red; color:yellow";obj.className = "red";

(四)元素添加

  1. 创建元素:createElement
        var newNode = document.createElement("h1");newNode.innerHTML = "新添加的元素";newNode.className = 'cccccc';newNode.style.background = "yellow";
  1. 复制元素:可设置参数为false进行浅复制,只复制外壳,设置为true复制全部。
        var originalElement = document.querySelector(".original");var clonedElement = originalElement.cloneNode(false);var clonedElementFull = originalElement.cloneNode(true);
  1. 添加元素:appendChild添加到子元素最后位置,insertBefore在某个子元素前添加,replaceChild替换掉该元素。
        var container = document.querySelector(".cc");container.appendChild(newNode);var existingElement = document.querySelector(".existing");container.insertBefore(newNode, existingElement);var elementToReplace = document.querySelector(".toReplace");container.replaceChild(newNode, elementToReplace);

(五)元素删除

父级元素调用删除的方法removeChild(要删除的元素)

        var parentElement = document.querySelector(".parent");var childToRemove = document.querySelector(".toRemove");parentElement.removeChild(childToRemove);

二、知识补充与优化建议

(一)性能优化

在进行大量 DOM 操作时,尽量减少频繁的直接操作 DOM,可以先在内存中对数据进行处理,然后一次性更新 DOM,以提高性能。例如,当需要动态添加多个元素时,可以先将这些元素构建成一个字符串或者数组,最后一次性添加到 DOM 中。

        var elementsToAdd = [];for (var i = 0; i < 10; i++) {var newElement = document.createElement("div");newElement.textContent = "Element " + i;elementsToAdd.push(newElement);}var container = document.querySelector(".container");container.innerHTML = "";elementsToAdd.forEach(element => container.appendChild(element));

(二)事件委托

利用事件冒泡的原理,将事件绑定在父元素上,通过判断事件源来处理子元素的事件,这样可以减少事件绑定的数量,提高性能。

        var parent = document.querySelector(".parent");parent.addEventListener("click", function(event) {if (event.target.classList.contains("child")) {console.log("Child element clicked");}});

(三)跨浏览器兼容性

不同浏览器对 DOM 操作的实现可能会有一些差异,在实际开发中需要考虑到兼容性问题,可以使用一些成熟的库或框架来解决兼容性问题。例如,使用 jQuery 可以简化 DOM 操作,并且在不同浏览器中有较好的兼容性。

        <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>$(document).ready(function() {$("#element").click(function() {console.log("Clicked using jQuery");});});</script>

这篇关于深入理解 JavaScript DOM 操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134608

相关文章

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF