web前端学习(四十二)——JavaScript DOM元素(添加、移除及替换)、DOM集合(Collection)、DOM节点列表(NodeList)

简介: web前端学习(四十二)——JavaScript DOM元素(添加、移除及替换)、DOM集合(Collection)、DOM节点列表(NodeList)

1.DOM元素的相关操作方法


方法

描述

getElementById()

返回带有指定 ID 的元素。

getElementsByTagName()

返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。

getElementsByClassName()

返回包含带有指定类名的所有元素的节点列表。

appendChild()

把新的子节点添加到指定节点。

removeChild()

删除子节点。

replaceChild()

替换子节点。

insertBefore()

在指定的子节点前面插入新的子节点。

createAttribute()

创建属性节点。

createElement()

创建元素节点。

createTextNode()

创建文本节点。

getAttribute()

返回指定的属性值。

setAttribute()

把指定属性设置或修改为指定的值。

1.1 创建新的 HTML 元素 (节点) - appendChild()

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>JS简单学习</title>
  </head>
  <body>
    <div id="div1">
      <p id="p1">这是一个段落。</p>
      <p id="p2">这是另外一个段落。</p>
    </div>
    <script type="text/javascript">
      //创建 <p></p> 元素
      var para=document.createElement("p");
      //为 <p></p> 元素创建一个新的文本节点
      var node=document.createTextNode("这是一个新的段落。");
      //将文本节点添加到 <p></p> 元素中
      para.appendChild(node);
      //查找已存在的元素 <div></div>
      var element=document.getElementById("div1");
      //把新创建的 <p></p> 元素添加到已存在的元素 <div></div> 中
      element.appendChild(para);
    </script>
  </body>
</html>

1.2 创建新的 HTML 元素 (节点) - insertBefore()

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <div id="div1">
      <p id="p1">这是一个段落。</p>
      <p id="p2">这是另外一个段落。</p>
    </div>
    <script type="text/javascript">
      //创建 <p></p> 元素
      var para=document.createElement("p");
      //为 <p></p> 元素创建一个新的文本节点
      var node=document.createTextNode("这是一个新的段落。");
      //将文本节点添加到 <p></p> 元素中
      para.appendChild(node);
      //查找已存在的父元素 <div></div>
      var element=document.getElementById("div1");
      //查找已存在的子元素 <p></p>
      var child=document.getElementById("p1");
      //在div模块中,将新创建的 para 元素添加到 child 元素之前
      element.insertBefore(para,child);
    </script>
  </body>
</html>

1.3 移除已存在的HTML 元素 - removeChild()

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <div id="div1">
      <p id="p1">这是一个段落。</p>
      <p id="p2">这是另外一个段落。</p>
    </div>
    <script type="text/javascript">
      var parent=document.getElementById("div1");
      var child=document.getElementById("p1");
      //从父元素 <div> 中移除 id="p1" 的子元素 <p>
      parent.removeChild(child);
    </script>
  </body>
</html>

1.4 替换 HTML 元素 - replaceChild()

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <div id="div1">
      <p id="p1">这是一个段落。</p>
      <p id="p2">这是另外一个段落。</p>
    </div>
    <script type="text/javascript">
      var para=document.createElement("p");
      var node=document.createTextNode("这是一个新的段落。");
      para.appendChild(node);
      var parent=document.getElementById("div1");
      var child=document.getElementById("p1");
      //在div模块中,将新创建的 para 元素替换掉 child 元素
      parent.replaceChild(para,child);
    </script>
  </body>
</html>

 

2.DOM集合(Collection)


getElementsByTagName()方法返回 HTMLCollection 对象。

HTMLCollection对象类似包含 HTML 元素的一个数组HTMLCollection 对象的 length 属性定义了集合中元素的数量。(常用于遍历集合中的元素)

注意:HTMLCollection 不是一个数组!

HTMLCollection看起来可能是一个数组,但其实不是。你可以像数组一样,使用索引( 0 为起始位置)来访问获取元素。

HTMLCollection无法使用数组的方法: valueOf(), pop(), push(), join()

2.1 实例一:通过索引访问元素、使用length属性 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <h2>JavaScript HTML DOM</h2>
    <p>Hello World!!!</p> 
    <p>Hello Redis!!!</p> 
    <p id="demo"></p>
    <script type="text/javascript">
      var myCollection=document.getElementsByTagName("p");
      document.getElementById("demo").innerHTML=
        "第二个段落的内容为: <span style='color: red;'>" + myCollection[1].innerHTML + "</span>";
      document.write("文档包含" + myCollection.length + " 个段落。");
    </script>
  </body>
</html>

2.2 实例二:通过length属性对集合进行遍历

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <h2>JavaScript HTML DOM</h2>
    <p>Hello World!!!</p> 
    <p>Hello Redis!!!</p>
    <p>点击按钮修改 p 元素的字体颜色。</p>
    <button type="button" onclick="myFunction()">点击这里</button>
    <script type="text/javascript">
      function myFunction() {
        var myCollection=document.getElementsByTagName("p");
        for(var i=0;i<myCollection.length;i++) {
          myCollection[i].style.color="red";
        }
      }
    </script>
  </body>
</html>

3.DOM节点列表(NodeList)


NodeList 对象是一个从文档中获取的节点列表 (集合) NodeList 对象类似 HTMLCollection 对象。


一些旧版本浏览器中的方法(如:getElementsByClassName())返回的是 NodeList 对象,而不是 HTMLCollection对象。


所有浏览器的childNodes属性返回的是 NodeList 对象。大部分浏览器的querySelectorAll()返回 NodeList 对象。


NodeList对象 length 属性定义了节点列表中元素的数量。

NodeList是一个文档节点的集合。


NodeList HTMLCollection有很多类似的地方。

NodeList HTMLCollection都与数组对象有点类似,可以使用索引 (0, 1, 2, 3, 4, ...) 来获取元素。


NodeList HTMLCollection都有length 属性。

HTMLCollection元素可以通过 nameid 或索引来获取。

NodeList只能通过索引来获取。只有 NodeList 对象有包含属性节点和文本节点。

节点列表不是一个数组!节点列表看起来可能是一个数组,但其实不是。你可以像数组一样,使用索引来获取元素。(以 0 为起始位置来访问)

节点列表无法使用数组的方法: valueOf(), pop(), push(), join()

3.1 实例一:通过索引访问元素、使用length属性  

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <h2>JavaScript HTML DOM</h2>
    <p>Hello World!!!</p> 
    <p>Hello Redis!!!</p> 
    <p id="demo"></p>
    <script type="text/javascript">
      var myNodelist=document.querySelectorAll("p");
      document.getElementById("demo").innerHTML=
        "第二个段落的内容为: <span style='color: red;'>" + myNodelist[1].innerHTML + "</span>";
      document.write("文档包含 " + myNodelist.length + " 个段落。");
    </script>
  </body>
</html>

3.2 实例二:通过length属性对节点列表进行遍历

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <h2>JavaScript HTML DOM</h2>
    <p>Hello World!!!</p> 
    <p>Hello Redis!!!</p>
    <p>点击按钮修改 p 元素的字体颜色。</p>
    <button type="button" onclick="myFunction()">点击这里</button>
    <script type="text/javascript">
      function myFunction() {
        var myNodelist=document.querySelectorAll("p");
        for(var i=0;i<myNodelist.length;i++) {
          myNodelist[i].style.color="red";
        }
      }
    </script>
  </body>
</html>

 

相关文章
|
10月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
10月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
10月前
|
JavaScript 前端开发 开发者
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
10月前
|
JavaScript 前端开发 物联网
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
778 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
JavaScript 前端开发 API
|
JSON JavaScript 前端开发
JavaScript入门干货:蓝桥杯Web组分章学习笔记(基于蓝桥云课《JavaScript基础入门》)
这是一份详尽的JavaScript学习笔记,涵盖基础到进阶内容。包括变量、运算符、数组、字符串操作,DOM/BOM事件处理,内置对象(如Array、Date、Math)用法,JSON格式解析,以及函数作用域与闭包等核心概念。同时深入探讨值类型和引用类型的差异、异常处理机制,并介绍函数高级特性如call/apply/bind方法、递归及arguments对象。代码按章节分点整理,注释细致,适合初学者系统掌握JavaScript编程知识。
237 2
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
699 8
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
15580 23

热门文章

最新文章