JavaScript与DOM的奇妙探险:从入门到精通的实战笔记

news2024/12/23 0:54:27

文章目录

  • JavaScript
  • 基本说明
  • 特点
  • 两种使用方式
    • 在script中写
    • 使用script标签引入JS文件
  • 数据类型
    • 介绍
    • 特殊值
  • 运算符
    • 算数运算符
    • 赋值运算符
    • 逻辑运算符:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bbf5c150699845af837d3c45c926e941.png)
    • 条件运算符
  • 数组的定义
    • 基本使用
    • 数组的遍历
  • 函数
    • 含义
    • 函数定义方式
      • 基本语法
      • 代码示例
    • 细节和注意事项
  • 自定义对象
    • Object形式
    • {} 形式
  • 事件
    • 介绍
    • 事件一览表
    • 事件分类
    • 事件的注册
    • 静态注册事件
    • 动态注册事件
            • 动态事件注册的步骤
    • onload加载完成事件
    • onclick单击事件
    • onblur失去焦点事件
    • onchange 内容改变事件
    • onsubmit事件
  • dom
    • 介绍及其分类
  • HTML DOM
    • 介绍
    • document 对象
      • 说明
      • 对象方法一览
  • HTML DOM结点
    • 介绍
        • 在 HTMLDOM中,每个部分都是节点:
        • 节点常用方法
        • 节点常用属性

在现代Web开发中,JavaScript与DOM(文档对象模型)是每个开发者必不可少的工具和技能。无论你是刚踏入前端开发领域的新手,还是希望深入了解并掌握高级技巧的经验丰富者,这篇笔记都会为你提供宝贵的指导。本文将带你全面了解JavaScript与DOM的关键概念、基本操作和高级应用,帮助你在开发过程中游刃有余,创造出更加动态和交互性强的网页。
参考学习:JavaScript 教程 (w3school.com.cn)

JavaScript

基本说明

JavaScript 能改变 HTML 内容,能改变 HTML 属性,能改变 HTML 样式 (CSS),能完成 页面的数据验证。

特点

  1. JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序 的运行过程中逐行进行解释

  2. JavaScript是一种基于对象的脚本语言,可以创建对象,也能使用现有的对象(有对象)。

  3. JavaScript是弱类型的,对变量的数据类型不做严格的要求,变量的数据类型在运行过程 可以变化。
    代码示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>JavaScript 是弱类型的</title>
    <!-- 案例演示 -->
    <!--
    解释
    1. js 代码可以写在 script 标签中
    2. type="text/javascript" 表示这个脚本(script)类型是 javascript
    3. type="text/javascript" 可以不写,但是建议写上
    4. js 语句可以不写 ; 建议写上
    5. var -->
    <script type="text/javascript">
    // 弱类型
    // var name = "haha";
    // 输出 alert() 使用弹框方式
    // 输出 console.log() 在调试输出
    // alert("name=" + name);
    // 输出变量的类型 typeof, 输出变量的类型
    // alert(typeof name);
    // name = 100; //给 name 重新赋值
    // alert(typeof(name)); // 类型 number
    var age = 10; // 数值
    console.log("age=" + age);
    console.log(typeof age);
    age = "北京";
    console.log("age=" + age);
    console.log(typeof age);
    // 那如果输出字符串 + 数字的话会把数字转成 string 吗
    var n = 123 + "abc";
    console.log(n);
    console.log(typeof n);
    </script>
    </head>
    <body>
    </body>
    </html>
    

    在这里插入图片描述

  4. 跨平台性(只要是可以解释 JS 的浏览器都可以执行,和平台无关)

两种使用方式

  1. 在script中写

    1. 代码示例:

      1.  <!DOCTYPE html>
         <html lang="en">
         <head>
         <meta charset="UTF-8">
         <title>script 标签中写 JS 代码</title>
         <!-- 解读
         1. 可以在 head 和 body 嵌入 script
         2. 执行顺序从上到下
         3. 建议放在 head -->
         <script type="text/javascript">
         // 在 head 内使用 script 写 js
         console.log("ok");
         </script>
         </head>
         <body>
         <script type="text/javascript">
         // 在 body 内使用 script 写 js
         console.log("hi");
         </script>
         </body>
         </html>
        

      在这里插入图片描述

  2. 使用script标签引入JS文件

    1. 代码示例:

      创建两个文件:test.js和js-use.html

      test.js:
      ---------------------------------------------------------------------------------------------------------------------
      alert("我是test.js文件");
      
      js-use.html:
      --------------------------------------------------------------------------------------------------------------
      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>使用 script 标签引入 JS 文件</title>
      <!--
      <script type="text/javascript" src="引入的js文件"></script>
      -->
      <script type="text/javascript" src="./.idea/test.js"></script>
      </head>
      <body>
      </body>
      </html>
      

    在这里插入图片描述

数据类型

  1. 介绍

    1. 数值类型 number
    2. 字符串类型 string
    3. 对象类型 object
    4. 布尔类型 boolean
    5. 函数类型 function
  2. 特殊值

    1. undefined 变量未赋初始值时,默认undefined

    2. null 控制

    3. NAN Not a Number 非数值

    4. 代码示例:

      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>数据类型-特殊值</title>
      </head>
      <body>
      <script type="text/javascript">
      // 说明:
      // 1. typeof() 是 JavaScript 语言提供的一个函数。
      // 2. 返回变量的数据类型
      // 3. 3 个特殊值:undefined(没有赋值就使用)、null、NaN(当不能识别类型)
      var email; // 特殊值 undefined
      console.log("email=" + email); // undefined
      var address = null; // 特殊值 null
      console.log("address=" + address); // null
      console.log(10 * "abc"); // NaN (Not a Number)
      </script>
      </body>
      </html>
      

      在这里插入图片描述

运算符

  1. 算数运算符

在这里插入图片描述

  1. 赋值运算符

在这里插入图片描述

注意事项

  1. 等于: == 是简单的做字面值的比较

  2. 全等于:===除了做字面值的比较之外,还会比较两个变量的数据类型

  3. 逻辑运算符:在这里插入图片描述

      1. 注意事项

      2. 在 JavaScript 语言中,所有的变量,都可以做为一个 boolean 类型的变量去使用

      3. 0 、null、 undefined、“”(空串) 都认为是 false

      4. 遵守短路与的机制

      5. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>逻辑运算符注意事项和使用细节</title>
        <script type="text/javascript">
        // 1. 在 JavaScript 语言中,所有的变量,都可以作为一个 boolean 类型的变量去使用。
        // 体会:js 语法是比较松散的。
        var name = "cong";
        var age = 800;
        var n1 = null;
        if (!n1) {
            alert("hi~");
        }
        // 2. 0、null、undefined、""(空串)、NaN 都认为是 false
        var address; // undefined
        if (!(100 * "hello")) {
            alert("ok~~");
        }
        // 3. && 且运算,有两种情况 => 解读(&& 返回值是遵守短路与的机制)
        var res1 = null && 800;
        alert("res1=" + res1);
        var res2 = "cong" || 800;
        // 4. || 或运算,有两种情况 => 解读(|| 返回值是遵守短路或的机制)
        alert("res2=" + res2);
        // 小练习
        var res3 = (10 + 1) || (6 < 0);
        alert("res3=" + res3); // 11
        // 5. && 运算和 || 运算有短路现象
        var n1 = 1;
        var n2 = 3;
        var res4 = (n1++ > 100) || n2++;
        alert("n1=" + n1 + " n2=" + n2);
        </script>
        </head>
        <body>
        </body>
        </html>
        

        在这里插入图片描述

  4. 条件运算符

    1. 代码示例:

      1.  <!DOCTYPE html>
         <html lang="en">
         <head>
         <meta charset="UTF-8">
         <title>条件运算符</title>
         <script type="text/javascript">
         // 1. 规则:如果 (10 > 1) 条件表达式为 T,返回第一个表达式的值
         //    条件表达式为 F,返回第 2 个表达式的值
         // 2. 看出 js 使用比较灵活
         var n1 = 90;
         var n2 = 1;
         var res = n2 > 9 ? "cong" + "你好" : 800 + n1;
         alert("res=" + res);
         </script>
         </head>
         <body>
         </body>
         </html>
        

      在这里插入图片描述

数组的定义

  1. 基本使用

    1. 代码示例:

      1.  <!DOCTYPE html>
         <html lang="en">
         <head>
         <meta charset="UTF-8">
         <title>数组定义</title>
         <script type="text/javascript">
         // "Audi", "BMW", "Volvo";
         // 数组定义方式1
         var cars1 = ["Audi", "BMW", "Volvo"];
         console.log("cars1=" + cars1);
         console.log(cars1[1]); // 表示访问 cars1 数组的第 2 个元素, 1 表示下标/索引,从 0 开始编号
        
         // 数组定义方式2
         var cars2 = []; // 空数组
         // 添加元素
         cars2[0] = "奥迪";
         cars2[1] = "宝马";
         cars2[2] = "奔驰";
         console.log("cars2=" + cars2);
         console.log("cars2[2]=" + cars2[2]); // 奔驰
         console.log("cars2[10]=" + cars2[10]); // 如果该元素不存在,返回的就是 undefined
        
         // 数组定义方式3
         var cars3 = new Array("Audi", "BMW", "Volvo");
         console.log("cars3=" + cars3);
         console.log("cars3[0]=" + cars3[0]); // Audi
        
         // 数组定义方式4
         var cars4 = new Array(); // 空数组
         console.log(typeof cars4);
         cars4[0] = "法拉利";
         cars4[1] = "保时捷";
         cars4[2] = "yy"; // 相当于是给数组扩容
         cars4[0] = "zz"; // 替换
         cars4[8] = "红旗"; // 扩容, 如果是跳过了下标给赋值,那么中间没有赋值的元素为 undefined或逗号
         console.log("cars4[3]=" + cars4[3]); // undefined
         console.log("cars4=" + cars4);
         </script>
         </head>
         <body>
         </body>
         </html>
        

      在这里插入图片描述

  2. 数组的遍历

    1. 代码示例:

      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>数组使用和遍历</title>
      <script type="text/javascript">
      var cars = ["Audi", "BMW", "Volvo", 100, 1.1, true];
      // 遍历
      console.log("数组的长度= " + cars.length); // 6
      for (var i = 0; i < cars.length; i++) {
          console.log(cars[i]); // log 方法会自动换行
      }
      </script>
      </head>
      <body>
      </body>
      </html>
      

在这里插入图片描述

函数

  1. 含义

    1. 函数是由事件驱动的,或者当它被调用时,执行的可重复使用的代码块

      1. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>函数快速入门</title>
        <script type="text/javascript">
        // 定义一个简单的函数
        // 解读:如果不调用函数,那么该函数是不会执行的
        function hi() {
            // 在 js 中如果要执行函数,有两种方式 1. 主动调用 hi(); 2. 通过事件去触发该函数
            alert("hi cong~");
        }
        </script>
        </head>
        <body>
        <!-- 这里表示给 button 绑定了 onclick 事件 -->
        <!-- 当用户点击了该 button,就会触发 hi() 函数 -->
        <button onclick="hi()">点击这里</button>
        </body>
        </html>
        

      在这里插入图片描述

  2. 函数定义方式

    1. 基本语法

      1. function 函数名(形参列表){
        函数体
        return 表达式

        }//调用 函数名(实参列表);

    2. 代码示例

      1.  <!DOCTYPE html>
         <html lang="en">
         <head>
         <meta charset="UTF-8">
         <title>使用函数方式1</title>
         <script type="text/javascript">
         // 定义没有返回值的函数
         function f1() {
             alert("f1() 被调用...");
         }
         f1();
        
         // 定义有形参的函数
         // 这里的形参不需要指定类型,name 的数据类型是由实参决定
         function f2(name) {
             alert("hi " + name);
         }
         f2("cong");
        
         // 定义有形参和返回值的函数,不需要指定返回类型,返回类型由返回的数据来决定
         // js 的函数调用机制和 java 一样
         function f3(n1, n2) {
             return n1 + n2;
         }
         alert("f3(10, 20)=" + f3(10, 20));
         </script>
         </head>
         <body>
         </body>
         </html>
        

      在这里插入图片描述

  3. 细节和注意事项

    1. JS中函数的重载会覆盖掉上一次的定义

    2. 函数的arguments隐形参数(作用域在function函数内)

      1. 隐形参数:在function函数中不需要定义,可以直接用来获取所有参数的变量。
      2. 隐形参数特别像java的可变参数一样。publicvoidfun(int…args)
      3. js中的隐形参数跟java的可变参数一样。操作类似数组
    3. 应用示例:

      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>函数使用注意事项和细节</title>
      <script type="text/javascript">
      // 1. JS 中函数的重载会覆盖掉上一次的定义
      // 解读
      // 1. JS 中函数的重载会覆盖掉上一次的定义
      // 2. 当你调用 f1() 时候其实调用的是 f1(name)
      // 3. 调用 f1(name) 如果你没有传入实参, 那么这个 name 就是 undefined
      
      // function f1() {
      // }
      
      // alert("ok jack~")
      
      // function f1(name) {
      // }
      
      // f1();
      // alert("hi " + name);
      
      // 2. 函数的 arguments 隐形参数(作用域在 function 函数内)
      // (1) 隐形参数: 在 function 函数中不需要定义,可以直接用来获取所有参数
      // (2) 隐形参数特别像 java 的可变参数一样。 public void fun(int ... args)
      // (3) js 中的隐形参数跟 java 的可变参数一样,操作类似数组
      
      function f2() {
          // 遍历函数的 arguments 隐形参数
          // arguments 是数组
          // 提示:如果我们希望通过 console.log 输出对象的数据,使用 , 连接而不是 +
          console.log("arguments= ", arguments);
          console.log("arguments 长度= " + arguments.length);
          alert("f2()...");
      }
      f2(10, 20, 30, "cong");
      
      // 3. (1) 如果我们的函数有形参,在传入实参的时候,仍然按照顺序匹配
      //    (2) 如果有匹配上,就赋给它,如果没有匹配上,也无所谓
      //    (3) 仍然会把所有的实参,赋给 arguments
      //    (4) 如果形参个数大于了实参个数,则该形参的值为 undefined
      
      function f3(n) {
          console.log("n=" + n); // 100
          console.log("arguments= ", arguments); // [100, 90, 20]
      }
      f3(100, 90, 20);
      
      </script>
      </head>
      <body>
      </body>
      </html>
      

      在这里插入图片描述

自定义对象

  1. Object形式

    1. 定义

      1. var对象名=newObject();//对象实例(空对象)
        对象名.属性名=值;//定义一个属性
        对象名.函数名=function(){}//定义一个函数
    2. 对象的访问

      1. 对象名.属性
      2. 对象名.函数名();
    3. 应用示例:

      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>自定义对象</title>
      <script type="text/javascript">
      // 自定义对象的方式1
      // person 是一个空对象,没有自定义的函数和属性
      var person = new Object();
      // 增加一个属性 name
      console.log("person 类型=" + typeof(person)); // object
      person.name = "cong";
      // 增加一个属性 age
      person.age = 20;
      // 增加函数
      person.say = function() {
          // 这里的 this 就是 person
          console.log("person 的信息 " + this.name + " " + this.age + " " + this.job);
      }
      // 调用
      // 访问属性
      console.log("name= " + person.name + " " + person.email);
      // 访问方法
      person.say();
      console.log("address= " + person.address);
      </script>
      <!-- 小细节, 如果没有定义属性,直接使用,就会出现变量提升,显示 undefined -->
      </head>
      <body>
      </body>
      </html>
      

    在这里插入图片描述

  2. {} 形式

    1. 定义
      var对象名={ 属性名:值,//定义属性
      属性名:值,//定义属性,注意有,号
      函数名:function(){}//定义函数
      };

    2. 对象访问

      1. 对象名.属性
      2. 对象名.函数名();
    3. 代码示例:

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>自定义对象方式2{} 形式</title>
          <script type="text/javascript">
              // 演示自定义对象方式2{} 形式
              var person = {
                  name: "cong", // 说明多个属性和函数之间,使用 , 隔开
                  age: 20,
                  hi: function() {
                      console.log("person 信息= " + this.name + " " + this.age);
                  },
                  sum: function(n1, n2) {
                      return n1 + n2;
                  }
              }
              // 使用
              console.log("外部访问 name=" + person.name + " age=" + person.age);
              person.hi();
              console.log("sum=" + person.sum(10, 30));
          </script>
      </head>
      <body>
      </body>
      </html>
      

    在这里插入图片描述

事件

学习文档:JavaScript 事件 (w3school.com.cn)

  1. 介绍

    1. 事件是电脑输入设备与页面进行交互的响应
    2. 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行
  2. 事件一览表

    1. 属性当以下情况发生时,出现此事件
      onabort图像加载被中断
      onblur元素失去焦点
      onchange用户改变域的内容
      onclick鼠标点击某个对象
      ondblclick鼠标双击某个对象
      onerror当加载文档或图像时发生某个错误
      onfocus元素获得焦点
      onkeydown某个键盘的键被按下
      onkeypress某个键盘的键被按下或按住
      onkeyup某个键盘的键被松开
      onload某个页面或图像被完成加载
      onmousedown某个鼠标按键被按下
      onmousemove鼠标被移动
      onmouseout鼠标从某元素移开
      onmouseover鼠标移到某元素之上
      onmouseup某个鼠标按键被松开
      onreset重置按钮被点击
      onresize窗口或框架被调整尺寸
      onselect文本被选定
      onsubmit提交按钮被点击
      onunload用户退出页面
  3. 事件分类

    1. 事件的注册

      1. 事件注册(绑定):当事件响应(触发)后要浏览器执行哪些操作代码,叫事件注册或事件绑定
    2. 静态注册事件

      1. 通过 html 标签的事件属性直接赋于事件响应后的代码,这种方式叫静态注册
    3. 动态注册事件

      1. 通过 js 代码得到标签的 dom 对象,然后再通过 dom 对象.事件名 =function(){} 这种形 式叫动态注册

        1. 动态事件注册的步骤
          1. 代码示例:

            <!DOCTYPE html>
            <html lang="en">
            <head>
            <meta charset="UTF-8">
            <title>onload 加载完成事件</title>
            <script type="text/javascript">
            // 定义了一个函数
            function sayOK() {
                alert('静态注册 onload 事件 sayOK');
            }
            // 1. 在 js 中,将页面窗口映射成 window 对象
            // 2. window 对象有很多的函数和属性,可以使用
            // 3. window.onload 表示页面被加载完毕
            // 4. 后面的 function (){} 表示加载完毕后,要执行的函数/代码
            // 5. 多说一句
            window.onload = function () {
                alert("动态注册 onload 事件");
            }
            </script>
            </head>
            <!-- 静态注册 -->
            <body>
            hello~
            <input type="text" value="测试"/>
            </body>
            </html>
            

          在这里插入图片描述

    4. onload加载完成事件

      1. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>onload 加载完成事件</title>
        <script type="text/javascript">
        // 定义了一个函数
        function sayOK() {
            alert('静态注册 onload 事件 sayOK');
        }
        // 1. 在 js 中,将页面窗口映射成 window 对象
        // 2. window 对象有很多的函数和属性,可以使用
        // 3. window.onload 表示页面被加载完毕
        // 4. 后面的 function (){} 表示加载完毕后,要执行的函数/代码
        // 5. 多说一句
        window.onload = function () {
            alert("动态注册 onload 事件");
        }
        </script>
        </head>
        <!-- 静态注册 -->
        <body>
        hello~
        <input type="text" value="测试"/>
        </body>
        </html>
        

        在这里插入图片描述

    5. onclick单击事件

      1. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>onclick 单击事件</title>
        <script type="text/javascript">
        function sayOK() {
            alert("你点击了 sayOK 按钮");
        }
        //当页面加载完毕后,我们再进行动态绑定
        //基本概念和机制一定要清楚
        window.onload = function () {
            // 动态注册 onclick 事件
            //1. 先拿到 id=btn01 的 button 对应dom对象
            //2. 通过 dom对象动态的绑定onclick事件
            //3. 通过document 的 getElementById 获取对应的dom对象
            // 挖坑~填坑
            var btn01 = document.getElementById("btn01");
            btn01.onclick = function () {
                alert("你点击了 sayHi 按钮");
            }
        }
        </script>
        </head>
        <body>
        <!--静态注册 onClick 事件-->
        <button onclick="sayOK()">sayOK 按钮</button>
        <button id="btn01">sayHi 按钮</button>
        </body>
        </html>
        

        在这里插入图片描述

    6. onblur失去焦点事件

      1. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>onblur 失去焦点事件</title>
        <script type="text/javascript">
        //静态绑定
        function upperCase() {
            //1. 先得到fname 输入框的value -> 得到对应dom对象
            //toUpperCase()是将字符串大写
            var fname = document.getElementById("fname");
            fname.value = fname.value.toUpperCase();//将其之后返回原来的变量
        }
        //在页面加载完毕,完成动态绑定
        window.onload = function () {
            //1.得到 fname2 的 dom对象
            var fname2 = document.getElementById("fname2");
            fname2.onblur = function () {
                fname2.value = fname2.value.toUpperCase();
            }
        }
        </script>
        </head>
        <body>
        输入英文单词:
        <input type="text" id="fname" onblur="upperCase()" /><br />
        输入英文单词:
        <input type="text" id="fname2" />
        </body>
        </html>
        

        在这里插入图片描述

    7. onchange 内容改变事件

      1. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>onchange 内容发生改变事件</title>
            <script type="text/javascript">
                function mySal() {
                    alert("工资范围变化了~");
                }
                //动态注册
                window.onload = function () {
                    //获取到 sel01 的 dom 对象
                    var sel01 = document.getElementById("sel01");
                    //给 sel01 绑定 onchange 事件
                    sel01.onchange = function () {
                        alert("你换女友了~");
                    }
                }
            </script>
        </head>
        <body>
        你当前工资水平: <!--静态注册 onchange 事件-->
        <select onchange="mySal()">
            <option>--工资范围--</option>
            <option>10k 以下</option>
            <option>10k-30k</option>
            <option>30k 以上</option>
        </select><br/>
        你当前女友是谁:
        <select id="sel01"><!--动态绑定 onchange-->
            <option>---女友---</option>
            <option>艳红</option>
            <option>春桃</option>
            <option>春花</option>
        </select>
        </body>
        </html>
        

      在这里插入图片描述

    8. onsubmit事件

      1. onsubmit:注册按钮被点击,提交表单

      2. 代码示例:

        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>onsubmit 表单提交事件</title>
        <script type="text/javascript">
        //静态注册表单提交事件
        function register() {
            //先得到输入的用户名和密码
            var username = document.getElementById("username");
            var pwd = document.getElementById("pwd");
            //判断是否为空""
            if ("" == username.value || "" == pwd.value) {
                alert("用户名和密码不能为空, 不能提交");
                return false; //不提交
            }
            //表示要提交
            return true;
        }
        //动态注册表单提交事件
        window.onload = function () {
            //使用折半法, 观察原页面是否真的是最新的, 是不是修改的页面和访问的页面一致
            //得到 form2 表单 dom 对象
            var form2 = document.getElementById("form2");
            //给 form2 绑定 onsubmit 事件
            //解释 onsubmit 绑定的函数,会直接将结果(f,t)返回给onsubmit
            form2.onsubmit = function () {
                if(form2.username.value == "" || form2.pwd.value == "") {
                    alert("用户名和密码不能为空, 不能提交");
                    return false; //不提交
                }
                return true;
            }
        }
        </script>
        </head>
        <body>
        <h1>注册用户1</h1> <!-- 静态注册表单提交事件-->
        <form action="1.txt" onsubmit="return register()">
            u: <input type="text" id="username" name="username"/><br/>
            p: <input type="password" id="pwd" name="pwd"/><br/>
            <input type="submit" value="注册用户"/>
        </form>
        <h1>注册用户2</h1> <!-- 动态注册表单提交事件-->
        <form action="1.txt" id="form2">
            u: <input type="text" name="username"/><br/>
            p: <input type="password" name="pwd"/><br/>
            <input type="submit" value="注册用户"/>
        </form>
        </body>
        </html>
        

        在这里插入图片描述


dom

参考文档:JavaScript HTML DOM (w3school.com.cn)

  1. 介绍及其分类

    1. dom是全称是文档对象模型,就把文档中的标签,属性,文本转化为对象来管理

    2. dom

      1. html dom(重点)
      2. css dom
      3. xml dom
  2. HTML DOM

    1. 介绍

      1. 当网页被加载时,浏览器会创建页面的文档对象模型(DocumentObjectModel)。
      2. HTML DOM 树 对象[属性,方法/函数]
        在这里插入图片描述
    2. document 对象

      1. 说明

        1. document 它管理了所有的 HTML 文档内容
        2. document 它是一种树结构的文档
        3. 有层级关系 在dom 中把所有的标签 都 对象化 (得到这个html标签的<—>对象–> 操作)
        4. 通过 document 可以访问所有的标签对象
      2. 对象方法一览

        1. 在这里插入图片描述

        2. 代码示例

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>getElementById 的使用</title>
                  <!--
                  1.先得到h1的dom对象,通过id获取
                  2.对h1对应的dom对象操作即可
                  -->
              <script type="text/javascript">
                  // function getValue() {
                      // myHeader 就是 dom对象
                      var myHeader = document.getElementById("myHeader");
                      // alert(myHeader);//HTMLHeadingElement
                      // 解读 myHeader.innerText 获取到 myHeader的包含的文本
                      // 看看 innerText , innerHTML
                       // alert(myHeader.innerText); // 文本 cong
                      // alert(myHeader.innerHTML); // html <div>cong</div>
                  // }
          
                  // 动态绑定,讲过老师,前面老师讲的 js 事件章节
                  // 为了让小伙伴,听得明白一点,快速演示->回去看 js 事件
                  window.onload = function () {
                      // 1. 获取 myHeader 的 dom 对象
                      var myHeader = document.getElementById("myHeader");
                      // 2. 给 myHeader 绑定 onclick 的事件
                      myHeader.onclick = function () {
                          alert("动态绑定 内容是=" + myHeader.innerText);
                      }
                  }
                  // 理解了基本原理,其它的问题就是 API 层级
              </script>
          </head>
          <body>
              <!-- 静态绑定一个点击事件 -->
              <h1 id="myHeader"><div>cong</div></h1>
              <p>Click on the header to alert its value</p>
          </body>
          </html>
          

          在这里插入图片描述

  3. HTML DOM结点

    1. 介绍

      1. 在 HTMLDOM中,每个部分都是节点:
        1. 文档本身是文档节点
        2. 所有 HTML 元素是元素节点
        3. 所有 HTML 属性是属性节点
        4. HTML 元素内的文本是文本节点
        5. 注释是注释节点
      2. 节点常用方法
        1. 通过具体的元素节点调用 getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点
        2. appendChild( oChildNode ) 方法,可以添加一个子节点,oChildNode 是要添加的孩子节点
      3. 节点常用属性
        1. childNodes 属性,获取当前节点的所有子节点
        2. firstChild 属性,获取当前节点的第一个子节点
        3. lastChild 属性,获取当前节点的最后一个子节点
        4. parentNode 属性,获取当前节点的父节点
        5. nextSibling 属性,获取当前节点的下一个节点 (后一个)
        6. previousSibling 属性,获取当前节点的上一个节点 (前一个)
        7. className 用于获取或设置标签的 class 属性值
        8. innerHTML 属性,表示获取/设置起始标签和结束标签中的内容
        9. innerText 属性,表示获取/设置起始标签和结束标签中的文本
      4. 代码示例:

        css.css文件
        ---------------------------------------------------------------------------------
        @CHARSET"UTF-8";
        body {
            width: 800px;
            margin-left: auto;
            margin-right: auto;
        }
        button {
            width: 200px;
            margin-bottom: 10px;
            text-align: left;
        }
        #btnList {
            float: left;
        }
        #total {
            width: 450px;
            float: left;
        }
        ul {
            list-style-type: none;
            margin: 0px;
            padding: 0px;
        }
        .inner li {
            border-style: solid;
            border-width: 1px;
            padding: 5px;
            margin: 5px;
            float: left;
        }
        .inner {
            width: 400px;
            border-width: 1px;
            margin-bottom: 10px;
            padding: 10px;
            float: left;
        }
        主页面
        ------------------------------------------------------------------------------------------------
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title>演示 HTML DOM 相关方法</title>
            <link rel="stylesheet" type="text/css" href="./css.css"/>
            <script type="text/javascript">
                //使用动态注册/绑定来演示
                window.onload = function () {
                    // 先获取btn01的dom
                    var btn01 = document.getElementById("btn01");
                    btn01.onclick = function () {
                        // 查找id=java 节点
                        var java = document.getElementById("java");
                        alert("java 节点文本=" + java.innerText);
                    };
        
                    var btn02 = document.getElementById("btn02");
                    btn02.onclick = function () {
                        //查找所有option 节点
                        // 梳理(id-->getElementById name-->getElementsByName 元素标签名->getElementsByTagName()
                        var options = document.getElementsByTagName("option");
                        alert(options); // object HtmlCollection
                        for (var i = 0; i < options.length; i++) {
                            alert("值= " + options[i].innerText);
                        }
                    };
        
                    //查找 name=sport 的节点
                    var btn03 = document.getElementById("btn03");
                    btn03.onclick = function () {
                        var sports = document.getElementsByName("sport");//NodeList
                        for (var i = 0; i < sports.length; i++) {
                            //过滤
                            if (sports[i].checked) {
                                alert("运动是= " + sports[i].value);
                            }
                        }
                    };
        
                    //查找 id=language 下所有li 节点
                    var btn04 = document.getElementById("btn04");
                    btn04.onclick = function () {
                        var lis = document.getElementById("language").getElementsByTagName("li");
                        for (var i = 0; i < lis.length; i++) {
                            alert(lis[i].innerText);//<li>xxx</li> <input value="xx"/>
                        }
                    };
        
                    //返回 id=sel01 的所有子节点[3种方法]
                    var btn05 = document.getElementById("btn05");
                    btn05.onclick = function () {
                        //var options = document.getElementById("sel01").getElementsByTagName("option");
                        //alert(document.getElementById("sel01").childNodes.length);//11=>object text
                        //解读
                        //1. 如果使用 document.getElementById("sel01").childNodes 获取的是object text 和 object htmloptionelement
                        //2. 如果不希望得到text 对象,需要将所有的内容放在一行
                        var childNodes = document.getElementById("sel01").childNodes;
                        for (var i = 0; i < childNodes.length; i++) {
                            if (childNodes[i].selected) {
                                alert(i + " " + childNodes[i].innerText);
                            }
                        }
                        alert("======================================================");
                        //还有一个以前方法
                        //解读
                        //1. sel01 是 HtmlSelectElement => 本身就有集合特点
                        var sel01 = document.getElementById("sel01");
                        for (var i = 0; i < sel01.length; i++) {
                            alert(sel01[i].innerText);
                        }
                    };
        
                    //返回 id=sel01 的第一个子节点
                    var btn06 = document.getElementById("btn06");
                    btn06.onclick = function () {
                        //除了上面的方法外,还可以直接使用属性firstChild
                        var sel01 = document.getElementById("sel01");
                        alert("xx=" + sel01.firstChild);//解读是按照 .childNodes 得到第一个子节点 //object text
                        alert("yy=" + sel01[0]);// 直接是得到第一个 option 节点 object htmloptionelement
                    };
        
                    //返回 id=java 的父节点
                    var btn07 = document.getElementById("btn07");
                    btn07.onclick = function () {
                        var java = document.getElementById("java");
                        //alert(java.parentNode);// object HtmlUListElement.
                        //alert(java.parentNode.innerHTML);//
                        //alert(java.parentNode.childNodes.length);//4
                        var childNodes = java.parentNode.childNodes;
                        for (var i = 0; i < childNodes.length; i++) {
                            alert("语言= " + childNodes[i].innerText);//java php,c++ py,
                        }
                    };
        
                    //返回 id=ct 的前后兄弟节点
                    var btn08 = document.getElementById("btn08");
                    btn08.onclick = function () {
                        //yyds
                        var ct = document.getElementById("ct");
                        alert(ct.previousSibling.innerText);//object text , 输出 undefined
                        alert(ct.previousSibling.previousSibling.innerText);//object htmloptionelement, 艳红
                        alert(ct.nextSibling.nextSibling.innerText);//object HtmlOptionElement, 输出春花
                        alert(ct.nextSibling.innerText);//object text, 输出 undefined
                    };
        
                    //设置#person 的文本域
                    var btn10 = document.getElementById("btn10");
                    btn10.onclick = function () {
                        var person = document.getElementById("person");
                        person.innerText = "这是我们最新的介绍";
                    };
                };
            </script>
        </head>
        <body>
        <div id="total">
            <div class="inner">
                <p>你会的运动项目:</p>
                <input type="checkbox" name="sport" value="tq">台球
                <hr/>
                <input type="checkbox" name="sport" value="zq" checked="checked">足球
                <input type="checkbox" name="sport" value="ppq">乒乓球 <br/>
                <p>你当前女友是谁:</p>
                <select id="sel01">
                    <option>---女友---</option>
                    <option>艳红</option>
                    <option id="ct" value="春桃菇凉">春桃</option>
                    <option>春花</option>
                    <option>桃红</option>
                </select>
                <hr/>
                <p>你的编程语言?</p>
                <ul id="language">
                    <li id="java">Java~~~</li>
                    <li>PHP</li>
                    <li>C++</li>
                    <li>Python</li>
                </ul>
                <br>
                <br>
                <hr/>
                <p>个人介绍:</p>
                <textarea name="person" id="person">个人介绍</textarea>
            </div>
        </div>
        <div id="btnList">
            <div>
                <button id="btn01">查找 id=java 节点</button>
            </div>
            <div>
                <button id="btn02">查找所有 option 节点</button>
            </div>
            <div>
                <button id="btn03">查找 name=sport 的节点</button>
            </div>
            <div>
                <button id="btn04">查找 id=language 下所有 li 节点</button>
            </div>
            <div>
                <button id="btn05">返回 id=sel01 的所有子节点</button>
            </div>
            <div>
                <button id="btn06">返回 id=sel01 的第一个子节点</button>
            </div>
            <div>
                <button id="btn07">返回 id=java 的父节点</button>
            </div>
            <div>
                <button id="btn08">返回 id=ct 的前后兄弟节点</button>
            </div>
            <div>
                <button id="btn09">读取 id=ct 的 value 属性值</button>
            </div>
            <div>
                <button id="btn10">设置#person 的文本域</button>
            </div>
        </div>
        </body>
        </html>
        

        在这里插入图片描述


通过本文的学习,你已经掌握了JavaScript与DOM的核心知识和实用技巧。从基础的DOM操作到高级的事件处理和动画效果,你现在具备了将静态网页转变为动态、互动用户体验的能力。希望这篇笔记能成为你前端开发旅程中的一块基石,不仅提升你的技术水平,更激发你在实际项目中不断创新和挑战的热情。继续探索,编写更出色的代码,创造令人惊叹的Web应用吧!

文本来源:韩顺平java课程笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信协议_C#实现CAN通信

CAN协议 CAN&#xff08;Controller Area Network&#xff09;即控制器局域网络。特点&#xff1a; 多主网络&#xff1a;网络上的任何节点都可以主动发送数据&#xff0c;不需要一个固定的主节点。双绞线&#xff1a;使用双绞线作为通信介质&#xff0c;支持较远的通信距离。…

为Word文档注入魔法!Python批量替换多个文档的多个关键字,轻松搞定!

嘿&#xff0c;各位小伙伴们&#xff0c;大家好&#xff01;有没有想过&#xff0c;如何在多个Word文档中批量替换多个关键字&#xff1f;不用担心&#xff0c;今天我来教大家一招&#xff0c;用Python轻松搞定这个问题&#xff01;保证让你分分钟拥有处理文档的超级魔法~✨&am…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器&#xff0c;用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器&#xff0c;用 x0-x30 表示&#xff0c;和 v7 不一样…

AndroidStudio与手机进行无线调试

(一)、前提条件 一部手机一条USB数据线一部电脑手机和电脑连接到同一个 Wifi开启手机的USB调试功能开启手机的无线调试功能 (二)、操作步骤 1、 将手机和电脑用USB数据线连接 2、 打开 终端&#xff0c;输入 adb devices ,查看手机和电脑是否连接成功。如下图&#xff1a; 2、…

Mac电脑硬盘无法读取怎么办 Mac硬盘读取慢会导致电脑卡吗 Paragon NTFS 激活码

Mac电脑作为众多用户的工作与生活伙伴&#xff0c;其稳定性和效率至关重要。然而&#xff0c;当遭遇硬盘无法读取或读取速度缓慢的问题时&#xff0c;这无疑会给用户带来极大的不便&#xff0c;影响日常操作与数据访问。下面我们来看看Mac电脑硬盘无法读取怎么办&#xff0c;Ma…

Kotlin性能:runCatching、try-catch块、无异常处理耗时比较

Kotlin性能&#xff1a;runCatching、try-catch块、无异常处理耗时比较 fun main(args: Array<String>) {val a 1.1fval b 2.2fval n1 System.nanoTime()val m1 System.currentTimeMillis()runCatching {cal(a, b)}val n2 System.nanoTime()val m2 System.currentT…

python中format函数和f-string详解

Python 中的 format() 函数是一种字符串格式化的方法&#xff0c;通过花括号 {} 来定义占位符&#xff0c;并通过 format() 方法中的参数来替换这些占位符。这种方法非常灵活&#xff0c;可以处理多种数据类型&#xff0c;并且可以通过索引、关键字或者属性名来访问对象的属性。…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.3大数据与2.2.4区块链

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

实战项目:仿muduo库实现并发服务器

目录 项目初始与项目演示HTTP服务器基础认识Reactor模式基础认识单Reactor单线程模式认识单Reactor多线程模式认识多Reactor多线程模式认识 目标定位总体大模块划分server模块的管理思想Buffer子模块Socket子模块Channel子模块Connection子模块Acceptor子模块TimerQueue子模块P…

记录些Spring+题集(9)

在网络应用开发中&#xff0c;Cookie、Session 和 Token 是常见的用于管理用户状态和身份验证的机制。 Cookie、Session、Token 的区别 这三个概念的产生与 HTTP 是一种无状态协议密切相关。在 HTTP 中&#xff0c;每次客户端与服务器之间进行通信时&#xff0c;服务器无法直…

8月长沙学术会议:经济金融发展国际会议(ICEFD 2024)

经济金融发展国际会议&#xff08;ICEFD 2024&#xff09;将于2024年8月20-22日在长沙盛大举行。本次会议汇聚了国内外众多高校、科研机构、企业界及其他相关领域的专家学者&#xff0c;共同探讨经济金融发展的新趋势、新挑战和新机遇。 长沙&#xff0c;这座历史悠久的文化名…

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

Python爬虫(1) --基础知识

爬虫 爬虫是什么&#xff1f; spider 是一种模仿浏览器上网过程的一种程序&#xff0c;可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等

功能如图&#xff1a; docker部署 version: "3" services:excalidraw:image: dannicool/docker-wechatbot-webhook:latestcontainer_name: wechatbot-webhookdeploy:resources:limits:cpus: 0.15memory: 500Mreservations:cpus: 0.05memory: 80Mrestart: alwayspor…

数据结构_Map和Set

目录 一、搜索模型 二、Map 2.1 Map.Entry 2.2 Map 方法 2.3 Map 注意事项 三、Set 3.1 Set 方法 3.2 Set 注意事项 四、哈希表 4.1 哈希表 4.2 冲突 4.3 哈希函数设计 4.4 闭散列 4.5 开散列/哈希桶 总结 【搜索树】 二叉搜索树又称二叉排序树&#xff0c;它或…

P4-AI产品经理-九五小庞

从0开始做AI产品的完整工作方法 项目启动 项目实施 样本测试模型推荐引擎 构建DMP&#xff08;数据管理平台&#xff09; 项目上线

Intel和AMD用户再等等!微软确认Win11 24H2年底前登陆

微软近日确认&#xff0c;Windows 11 24H2版本将于2024年底前正式登陆使用英特尔和AMD处理器的PC。 根据微软介绍&#xff0c;Windows 11 24H2将作为传统功能更新&#xff0c;将在今年晚些时候提供给所有设备。 此前&#xff0c;微软已向搭载骁龙X Plus和X Elite系列处理器的Co…

2024年计算机软考中级【硬件工程师】面试题目汇总(附答案)

硬件工程师面试题汇总分析 1、解释一下同步电路和异步电路 解题思路 同步电路和异步电路是指同步时序电路和异步时序电路。由于存储电路中触发器的动作特点不同&#xff0c;因此可以把时序电路分为同步时序电路和异步时序电路两种。同步时序电路所有的触发器状态的变化都是在同…

pytorch学习(七)torchvision.datasets的使用

网络上已经有公开的数据集&#xff0c;并且这些数据集被整合到了torchvision.datasets中&#xff0c;使用自带的函数可以直接下载。 1.数据集 具体有哪些数据可直接用torchvision.datasets加载呢&#xff1f;可以查看这个网址&#xff1a; datasets官网&#xff1a;Datasets…

Windows11+VS2019+Trimesh2 2.16 安装配置记录

Windows11VS2019Trimesh2 2.16 编译配置记录 trimesh2下载在VS进行配置trimesh2 vs2019编译 若无特别说明均在Release x64平台下配置测试 trimesh2下载 TriMesh2官网 的自述文件里说其新版本不能直接使用MSVC编译&#xff0c;但在Github找到一个大佬的仓库&#xff0c;该大佬直…