webapis Dom获取&属性操作

本文详细介绍了DOM(文档对象模型)的概念及其在网页动态更新中的作用,包括如何通过DOM对象来操作HTML元素,如修改内容、样式和属性。同时,文章探讨了JavaScript变量声明的首选项,推荐使用`const`并解释了何时使用`let`。此外,还讲解了间歇函数`setInterval`的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOM(Document Object Model)是将整个 HTML 文档的每一个标签元素视为一个对象,这个对象下包含了许多的属性和方法,通过操作这些属性或者调用这些方法实现对 HTML 的动态更新,为实现网页特效以及用户交互提供技术支撑。

简言之 DOM 是用来动态修改 HTML 的,其目的是开发网页特效及用户交互。

变量声明有三个 var let 和 const
我们应该用那个呢?
首先var 先排除,老派写法,问题很多,可以淘汰掉…
let or const ?
建议: const 优先,尽量使用const,原因是:
const 语义化更好
很多变量我们声明的时候就知道他不会被更改了,那为什么不用 const呢?  实际开发中也是,比如react框架,基本const
如果你还在纠结,那么我建议:
有了变量先给const,如果发现它后面是要被修改的,再改为let
1. 以后声明变量我们优先使用哪个?
const
有了变量先给const,如果发现它后面是要被修改的,再改为let
2. 为什么const声明的对象可以修改里面的属性?
因为对象是引用类型,里面存储的是地址,只要地址不变,就不会报错
建议数组和对象使用 const 来声明
3. 什么时候使用let声明变量?
如果基本数据类型的值或者引用类型的地址发生变化的时候,需要用let
比如 一个变量进行加减运算,比如 for循环中的 i++

webapis的作用和分类

 

DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API
白话文:DOM是浏览器提供的一套专门用来 操作网页内容 的功能

DOM 树

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>标题</title>
</head>
<body>
  文本
  <a href="">链接名</a>
  <div id="" class="">文本</div>
</body>
</html>

如下图所示,将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树,文档树直观的体现了标签与标签之间的关系。

DOM 节点

节点是文档树的组成部分,每一个节点都是一个 DOM 对象,主要分为元素节点、属性节点、文本节点等。

  1. 【元素节点】其实就是 HTML 标签,如上图中 headdivbody 等都属于元素节点。

  2. 【属性节点】是指 HTML 标签中的属性,如上图中 a 标签的 href 属性、div 标签的 class 属性。

  3. 【文本节点】是指 HTML 标签的文字内容,如 title 标签中的文字。

  4. 【根节点】特指 html 标签。

  5. 其它...

1. DOM 树是什么?
将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
作用:文档树直观的体现了标签与标签之间的关系
2. DOM对象怎么创建的?
浏览器根据html标签生成的 JS对象(DOM对象)
DOM的核心就是把内容当对象来处理
3. document 是什么?
是 DOM 里提供的一个对象
网页所有内容都在document里面

document

document 是 JavaScript 内置的专门用于 DOM 的对象,该对象包含了若干的属性和方法,document 是学习 DOM 的核心

获取DOM对象

  1. querySelector 满足条件的第一个元素

  2. querySelectorAll 满足条件的元素集合 返回伪数组

  3. 了解其他方式

    1. getElementById

    2. getElementsByTagName

<body>
    <div class="box">hello</div>
    <script>
       const div = document.querySelector('.box')
       console.log(div)
    </script>
</body>
<!-- css选择器 类选择器注意加. id选择器记得加# -->
<!-- 作用:可以获取第一个指定的html标签 对于js来说就是一个dom对象 如果获取得不到就是得到null -->


<body>
    <div>1</div>
    <div>2</div>
   <script>
    const div = document.querySelectorAll('div')
    console.log(div[0])
   </script>
</body>
<!-- 获取成功是一个有数组元素的数组,获取失败空数组NodeList [] -->

 

操作元素内容

通过修改 DOM 的文本内容,动态改变网页的内容。

  1. innerText 将文本内容添加/更新到任意标签位置,文本中包含的标签不会被解析。

  2. innerHTML 将文本内容添加/更新到任意标签位置,文本中包含的标签会被解析。

总结:如果文本内容中包含 html 标签时推荐使用 innerHTML,否则建议使用 innerText 属性。

<script>
  // innerText 将文本内容添加/更新到任意标签位置
  const intro = document.querySelector('.intro')
  // intro.innerText = '嗨~ 我叫李雷!'
  // intro.innerText = '<h4>嗨~ 我叫李雷!</h4>'
</script>


<script>
  // innerHTML 将文本内容添加/更新到任意标签位置
  const intro = document.querySelector('.intro')
  intro.innerHTML = '嗨~ 我叫韩梅梅!'
  intro.innerHTML = '<h4>嗨~ 我叫韩梅梅!</h4>'
</script>
    <div class="wrapper">
        <strong>传智教育年会抽奖</strong>
        <h1>一等奖:<span id="one">???</span></h1>
        <h3>二等奖:<span id="two">???</span></h3>
        <h5>三等奖:<span id="three">???</span></h5>
    </div>
    <script>
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
        }
        const arr = ['哈哈哈', '刘德华', '周星驰', '周杰伦', '李连杰']
        const all = document.querySelectorAll('.wrapper span')
        for (let i = 0; i < all.length; i++) {
            const index = getRandom(0, arr.length - 1)
            all[i].innerHTML = arr[index]
            arr.splice(index, 1)
        }
    </script>

常用属性修改

  1. 直接能过属性名修改,最简洁的语法

    <script>
      // 1. 获取 img 对应的 DOM 元素
      const pic = document.querySelector('.pic')
    	// 2. 修改属性
      pic.src = './images/lion.webp'
      pic.width = 400;
      pic.alt = '图片不见了...'
    </script>

     

控制样式属性

  1. 应用【修改样式】,通过修改行内样式 style 属性,实现对样式的动态修改。

通过元素节点获得的 style 属性本身的数据类型也是对象,如 box.style.colorbox.style.width 分别用来获取元素节点 CSS 样式的 colorwidth 的值。

任何标签都有 style 属性,通过 style 属性可以动态更改网页标签的样式,如要遇到 css 属性中包含字符 - 时,要将 - 去掉并将其后面的字母改成大写,如 background-color 要写成 box.style.backgroundColor

 

<script>
    // 获取 DOM 节点
    const box = document.querySelector('.intro')
    box.style.color = 'red'
    box.style.width = '300px'
    // css 属性的 - 连接符与 JavaScript 的 减运算符
    // 冲突,所以要改成驼峰法
    box.style.backgroundColor = 'pink'
  </script>
  1. 操作类名(className) 操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。

 

注意:

1.由于class是关键字, 所以使用className去代替

2.className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名

    <style>
        .box {
            width: 400px;
            height: 400px;
            background-color: blueviolet;
            
        }
        .box1 {
            text-align: center;
            line-height: 400px;
        }
    </style>
</head>
<body>
    <div>犯大吴疆土者</div>
    <script>
        const div = document.querySelector('div')
        div.className = 'box box1'
        // dom 对象.className = '类名'
    </script>
</body>

 

3.通过 classList 操作类控制CSS

为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名

<body>
     <div class="box"><img src="./images/slider02.jpg" alt=""></div>
     <script>
        const out = document.querySelector('.box')
        out.classList.add('box1')
        // 增加
        out.classList.remove('box')
        // 减少
        out.classList.toggle('box2')
        // 有这个属性就减少,没有就增加 切换
     </script>
</body>

 

操作表单元素属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框

正常的有属性有取值的跟其他的标签属性没有任何区别

获取:DOM对象.属性名

设置:DOM对象.属性名= 新值

<body>
    <input type="text" value="18162962574">
    <br>
    <script>
        document.querySelector('input').value = '1111111'
    </script>


    <input type="checkbox" class="checked">
    <br>
    <script>
       const input = document.querySelector('.checked')
       input.checked = false
    </script>
    <!-- 如果为true表示打√  如果为false表示不打√-->

    
    <button disabled>是否禁用</button>
    <script>
        document.querySelector('button').disabled = true
    </script>
    <!-- true 表示禁用 false表示不禁用 -->
</body>

间歇函数

知道间歇函数的作用,利用间歇函数创建定时任务。

setInterval 是 JavaScript 中内置的函数,它的作用是间隔固定的时间自动重复执行另一个函数,也叫定时器函数。 

 

    <script>
        setInterval(function () {
            document.write('我是Σ(☉▽☉"a')
        }, 1000)

        function fn() {
            document.write('瓜皮')
        }
        setInterval(fn, 1000)
        // 具名函数
    </script>

 

<body>
    <textarea name="" id="" cols="60" rows="20">
        用户注册协议
        欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
        【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看
    </textarea>
      <br>
      <button class="btn">我已经阅读用户协议(5)</button>
      <script>
         let i = 5
         const btn = document.querySelector('.btn')
         let id = setInterval(function(){
            i--
            btn.innerHTML = `我已经阅读用户协议(${i})`
            if (i<=0) {
                btn.disabled = false
                btn.innerHTML = '我同意'
                clearInterval(id)
            }
         },1000)
      </script>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值