• 从0开始学习JavaScript--JavaScript DOM操作与事件处理


    在前端开发中,DOM(文档对象模型)是一个至关重要的概念,它为JavaScript提供了一种与HTML和XML文档交互的方法。本文将深入探讨DOM的概念与作用,以及JavaScript与DOM之间的密切关系。

    DOM的概念与作用

    DOM是什么?

    DOM,全称为文档对象模型(Document Object Model),是一种表示和操作HTML、XML文档的接口。它将文档解析为一个由节点组成的树状结构,每个节点都代表文档中的一个元素、属性或文本。

    DOM的作用是什么?

    DOM的主要作用在于提供一种编程接口,使开发者可以通过JavaScript来操作网页的内容、结构和样式。通过DOM,我们可以动态地修改页面的元素、响应用户交互、创建新的元素等,实现页面的实时更新和交互性。

    JavaScript与DOM的关系

    JavaScript与DOM的关系密不可分,JavaScript通过DOM提供的接口来操作页面。以下是一些关键的连接点:

    1. JavaScript是一门脚本语言:

    JavaScript作为一门脚本语言,可以嵌入HTML文档中,并在浏览器中执行。它通过DOM来访问和操作文档的内容。

    2. DOM作为JavaScript的接口:

    DOM提供了一组接口,这些接口允许JavaScript通过文档的树状结构进行操作。通过这些接口,JavaScript可以选取元素、修改元素内容、添加或删除元素,以及响应用户的交互。

    3. 动态更新页面:

    JavaScript和DOM的结合使得我们能够在页面加载后动态地更新内容,而不需要刷新整个页面。这种动态性使得现代网页更加灵活和富有交互性。

    DOM基础操作

    在JavaScript中,DOM基础操作是前端开发中的关键部分。通过这些操作,我们能够选取特定的元素,操作元素的内容和属性,实现对页面的动态控制。

    1 选取元素

    在DOM中,选取元素是常见且基础的操作,有多种方式可以实现:

    通过ID选取元素:

    let elementById = document.getElementById("myElementId");
    
    • 1

    通过类名选取元素:

    let elementsByClassName = document.getElementsByClassName("myClassName");
    
    • 1

    通过标签名选取元素:

    let elementsByTagName = document.getElementsByTagName("div");
    
    • 1

    通过选择器选取元素(querySelector):

    let elementBySelector = document.querySelector("#myElementId .myClassName");
    
    • 1

    2 操作元素内容

    操作元素的内容是动态更新页面的重要一环,涉及到读取和修改文本内容以及读取和修改HTML内容:

    读取和修改文本内容:

    let element = document.getElementById("myElementId");
    
    // 读取文本内容
    let textContent = element.textContent;
    
    // 修改文本内容
    element.textContent = "New Text Content";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    读取和修改HTML内容:

    let element = document.getElementById("myElementId");
    
    // 读取HTML内容
    let innerHTML = element.innerHTML;
    
    // 修改HTML内容
    element.innerHTML = "New HTML Content";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3 操作元素属性

    元素的属性操作涉及到获取和设置元素的属性:

    获取元素属性:

    let element = document.getElementById("myElementId");
    
    // 获取元素属性
    let attributeName = element.getAttribute("src");
    
    • 1
    • 2
    • 3
    • 4

    设置元素属性:

    let element = document.getElementById("myElementId");
    
    // 设置元素属性
    element.setAttribute("src", "new-source.jpg");
    
    • 1
    • 2
    • 3
    • 4

    DOM节点操作

    DOM节点操作是在JavaScript中进行动态页面构建和修改的重要环节。通过创建、删除、替换节点,我们能够实现对DOM树的精细控制。

    1 创建新节点

    创建新节点是构建动态页面的基础,主要包括创建元素节点、创建文本节点以及将新节点插入到DOM中:

    创建元素节点:

    // 创建一个新的段落元素
    let newParagraph = document.createElement("p");
    
    • 1
    • 2

    创建文本节点:

    // 创建包含文本内容的文本节点
    let newText = document.createTextNode("This is a new text node.");
    
    • 1
    • 2

    插入新节点到DOM中:

    // 将新段落元素添加到body中
    document.body.appendChild(newParagraph);
    
    // 将文本节点添加到新段落元素中
    newParagraph.appendChild(newText);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2 删除节点

    删除节点是在页面动态更新时常见的操作,主要包括删除元素节点和删除子节点:

    删除元素节点:

    // 获取要删除的元素
    let elementToRemove = document.getElementById("elementId");
    
    // 删除元素
    elementToRemove.parentNode.removeChild(elementToRemove);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    删除子节点:

    // 获取要删除的父元素
    let parentElement = document.getElementById("parentElementId");
    
    // 删除第一个子节点
    parentElement.removeChild(parentElement.firstChild);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3 替换节点

    替换节点可以实现在DOM中进行动态的内容切换,主要包括替换元素节点和克隆节点:

    替换元素节点:

    // 创建一个新的div元素
    let newDiv = document.createElement("div");
    
    // 获取要替换的旧元素
    let oldElement = document.getElementById("oldElementId");
    
    // 替换元素
    oldElement.parentNode.replaceChild(newDiv, oldElement);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    克隆节点:

    // 获取要克隆的节点
    let originalNode = document.getElementById("originalNodeId");
    
    // 克隆节点(参数为true表示深度克隆,包括所有子节点)
    let clonedNode = originalNode.cloneNode(true);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    事件处理

    在前端开发中,事件处理是实现用户交互和页面响应的核心部分。本章将深入探讨事件的概念、常见事件类型、事件对象以及如何通过JavaScript进行事件监听和处理。

    1 事件概述

    常见事件类型:

    在DOM中,有许多不同类型的事件,常见的包括点击事件(click)、鼠标悬停事件(mouseover)、表单提交事件(submit)等。每个事件都对应着用户在页面上的一种操作。

    事件对象:

    当事件发生时,浏览器会创建一个事件对象,其中包含有关事件的信息,例如触发事件的元素、鼠标位置等。通过事件对象,我们可以更灵活地处理和响应事件。

    2 事件监听

    使用addEventListener绑定事件:

    let myElement = document.getElementById("myElementId");
    
    // 添加点击事件监听器
    myElement.addEventListener("click", function(event) {
      console.log("Element clicked!");
      console.log("Mouse coordinates: ", event.clientX, event.clientY);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    事件冒泡与捕获:

    事件在DOM中传播的过程分为冒泡阶段和捕获阶段。通过addEventListener的第三个参数,可以指定事件在捕获阶段(true)还是冒泡阶段(false,默认)被处理。

    // 在捕获阶段处理事件
    myElement.addEventListener("click", function(event) {
      console.log("Capture phase: Element clicked!");
    }, true);
    
    // 在冒泡阶段处理事件
    myElement.addEventListener("click", function(event) {
      console.log("Bubble phase: Element clicked!");
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3 事件处理函数

    内联事件处理:

    在HTML标签中直接添加事件处理函数:

    <button onclick="myFunction()">Click mebutton>
    
    • 1

    外部事件处理函数:

    在JavaScript中定义事件处理函数,并在HTML或通过脚本绑定:

    function myFunction() {
      console.log("Button clicked!");
    }
    
    let myButton = document.getElementById("myButtonId");
    myButton.addEventListener("click", myFunction);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实例演练

    在这一节中,我们将通过实际的例子演示如何动态创建交互性元素,并制作一个简单的交互性页面。我们将创建按钮和表单元素,然后使用按钮触发事件,以及处理表单提交事件。

    1 动态创建交互性元素

    创建按钮:

    // 获取父元素
    let container = document.getElementById("container");
    
    // 创建按钮元素
    let button = document.createElement("button");
    button.textContent = "Click me";
    
    // 将按钮添加到父元素中
    container.appendChild(button);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    创建表单元素:

    // 获取父元素
    let container = document.getElementById("container");
    
    // 创建表单元素
    let form = document.createElement("form");
    
    // 创建输入框元素
    let input = document.createElement("input");
    input.type = "text";
    input.placeholder = "Enter text";
    
    // 创建提交按钮
    let submitButton = document.createElement("button");
    submitButton.type = "submit";
    submitButton.textContent = "Submit";
    
    // 将输入框和提交按钮添加到表单中
    form.appendChild(input);
    form.appendChild(submitButton);
    
    // 将表单添加到父元素中
    container.appendChild(form);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2 制作简单的交互性页面

    通过按钮触发事件:

    // 获取按钮元素
    let button = document.querySelector("button");
    
    // 添加点击事件监听器
    button.addEventListener("click", function() {
      console.log("Button clicked!");
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    表单提交事件处理:

    // 获取表单元素
    let form = document.querySelector("form");
    
    // 添加表单提交事件监听器
    form.addEventListener("submit", function(event) {
      // 阻止表单默认提交行为
      event.preventDefault();
    
      // 获取输入框的值
      let inputValue = input.value;
    
      // 处理表单提交逻辑
      console.log("Form submitted with value: ", inputValue);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    深入理解异步操作与事件循环

    在前端开发中,异步操作与事件循环是处理用户交互、网络请求以及定时任务的关键概念。本章将深入探讨setTimeout与setInterval的使用,模拟异步操作,以及事件循环的工作原理。

    1 setTimeout与setInterval的使用

    setTimeout的使用:

    // 延迟执行一段代码
    setTimeout(function() {
      console.log("Delayed execution after 2000 milliseconds");
    }, 2000);
    
    • 1
    • 2
    • 3
    • 4

    setInterval的使用:

    // 每隔一段时间执行一次代码
    let counter = 0;
    let intervalId = setInterval(function() {
      console.log("Interval execution: Count = " + counter);
      counter++;
    
      if (counter === 5) {
        clearInterval(intervalId); // 清除定时器
      }
    }, 1000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2 异步操作的模拟

    在JavaScript中,异步操作常常涉及到回调函数、Promise对象和async/await。以下是一个简单的模拟异步操作的例子:

    // 模拟异步操作,1秒后返回结果
    function simulateAsyncOperation() {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve("Async operation completed");
        }, 1000);
      });
    }
    
    // 使用async/await调用异步操作
    async function runAsyncOperation() {
      console.log("Start async operation");
    
      let result = await simulateAsyncOperation();
    
      console.log("Async operation result: ", result);
    }
    
    runAsyncOperation();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3 事件循环的工作原理

    在JavaScript中,事件循环(Event Loop)是实现异步操作的核心机制。简单来说,事件循环不断地检查消息队列是否有待处理的任务,然后执行这些任务。

    console.log("Start script");
    
    // 宏任务1
    setTimeout(function() {
      console.log("Timeout 1");
    }, 0);
    
    // 微任务1
    Promise.resolve().then(function() {
      console.log("Promise 1");
    });
    
    // 微任务2
    Promise.resolve().then(function() {
      console.log("Promise 2");
    });
    
    console.log("End script");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这个例子中,宏任务包括setTimeout中的回调函数,微任务则是Promise中的回调函数。事件循环会先执行所有的微任务,然后再执行宏任务。这种机制确保了异步操作的顺序执行。

    总结

    在本文中,分享了JavaScript中DOM操作与事件处理的重要概念和实践方法。首先,了解了DOM的基础,包括选取元素、操作元素内容和属性,以及节点的创建、删除、替换等基础操作。通过这些操作,能够在JavaScript中实现对页面结构的灵活控制。

    随后,深入研究了事件处理,包括事件的概念、常见事件类型、事件对象以及事件监听与处理函数的应用。通过实例演练,展示了如何动态创建交互性元素,并在页面中实现简单的交互逻辑,如按钮点击事件和表单提交事件的处理。

    进一步地,深入理解了异步操作与事件循环的机制,包括setTimeout与setInterval的使用、模拟异步操作以及事件循环的工作原理。这些知识有助于处理页面中的异步需求,提高用户体验。

    综合而言,本文为大家提供了一个全面的JavaScript前端开发入门指南,涵盖了DOM操作、事件处理、异步编程等核心概念。通过理解这些概念并在实际项目中应用,读者将能够构建出更具交互性和动态性的网页应用。

  • 相关阅读:
    数据管理知识体系指南(第二版)-第十章——参考数据和主数据-学习笔记
    当下,产业园区发展面临的十大问题
    mac-m1-docker安装nacos异常
    批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)
    1776年美国才建国,那一年中国在干什么?
    Node.JS入门(day01)
    SSM整合流程
    外包干了一个月,技术明显进步。。。。。
    30、HTML进阶——表格元素以及其他元素
    Flex 布局,学会瞬间让你不再掉头发,让布局变的更简单
  • 原文地址:https://blog.csdn.net/weixin_42011858/article/details/134416564