DOM-获取DOM元素、修改属性

451 阅读5分钟

DOM-获取DOM元素、修改属性

Web API 基本认知

1.作用和分类

1)作用:就是使用JS去操作html和浏览器

2)分类:DOM(文档对象模型)、BOM(浏览器对象模型)

2.什么是DOM

1)DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API

2)DOM作用:操作页面内容,可以开发网页内容特效和实现用户交互

3.DOM树

1)DOM树是什么

  • 将HTML文档一树状结构直观地表象出来,我们称之为文档树或DOM树

2)作用:文档树直观地体现了标签与标签之间的关系

image_o9SwN_-an_.png

4.DOM对象(重要)

1)DOM对象:浏览器根据html标签生成的JS对象

  • 所有的标签属性都可以在这个对象上面找到

  • 修改这个对象的属性会自动映射到标签身上

2)DOM的核心思想

  • 把网页内容当做对象来处理

3)document对象

  • 是DOM里提供的一个对象

  • 所以它提供的属性和方法都是用来访问和操作页面内容的

    例如:document.write()

  • 网页所有内容都在document里面

image_liFSC9SG-w.png

获取DOM对象

根据CSS选择器来获取DOM元素(重点)

1.选择匹配的第一个元素

1)语法:document.querySelector('css选择器')

2) 参数:包含一个或多个有效地CSS选择器字符串

3)返回值:CSS选择器匹配的第一个元素,一个HTMLElement对象。如果没有匹配到,则返回null

2.选择匹配的多个元素

1)语法:document.querySeleotrAll('css选择器')

2)参数:包含一个或多个有效的CSS选择器字符串

3)返回值:CSS选择器匹配的NodeList对象集合

document.querySelectorAll('css选择器')

得到的是一个****伪数组: 1)有长度有索引号的数组, 2)但是没有pop() push()等数组方法 想要得到里面的每一个对象,则需要遍历(如for)的方式获得

哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个 伪数组,里面只有一个元素而已

小括号里面的参数必须是字符串,也就是必须加引号

其他获取DOM元素方法(了解)

1)根据id获取一个元素:

document.getElementById('nav')

2)根据标签获取一类元素 获取页面所有div

document.getElementsByTagName('div')

3)根据类名获取元素 获取元素 获取页面所有类名为w的

document.getElementsByClassName('w')

设置/修改DOM元素内容

1.docum.write()方法

  • 只能将文本内容追加到</body>前面的位置

  • 文本中包含的标签会被解析

image_WzVN0aALGd.png

2.元素.innerText属性

  • 将文本内容添加或更新到任意标签位置

  • 文本中包含的标签不会被解析

image_qV990AwfN-.png

3.元素.innerHTML属性

  • 将文本内容添加或更新到任意标签位置

  • 文本中包含的标签会被解析

image_OAB9CCq9vx.png

设置/修改DOM元素属性

1.设置/修改元素常用属性

  • 还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片

  • 最常见的属性比如: href、title、src 等

1)语法:对象.属性=值

image_eThoHvzA1j.png

2.设置/修改元素样式属性

还可以通过 JS 设置/修改标签元素的样式属性

  • 比如通过 轮播图小圆点自动更换颜色样式

  • 点击按钮可以滚动图片,这是移动的图片的位置 left 等等

学习路径:

  • 通过 style 属性操作CSS

  • 操作类名(className) 操作CSS

  • 通过 classList 操作类控制CSS

1)通过 style 属性操作CSS

  • 语法:对象.style.样式属性=值

image_Lkcoo_zRFM.png

注意: 1.修改样式通过style属性引出 2.如果属性有-连接符,需要转换为小驼峰命名法 3.赋值的时候,需要的时候不要忘记加css单位

2)操作类名(className) 操作CSS

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

  • 语法:元素.className = 'active' =>active是一个CSS类名

  • 注意:

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

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

      ⭐ 直接使用className赋值会覆盖以前的类名

3)通过 classList 操作类控制CSS

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

  • 语法:

image_N3QeZmf80d.png

3.设置/修改 表单元素 属性

image_hWV6ELKDjH.png

image_x44V5Pnrkg.png

定时器—间歇函数

1.定时器函数基本使用

1)开启定时器

setInterval(函数,间隔时间)

  • 作用:每隔一段时间调用这个函数

  • 间隔时间单位是毫秒

image_X-Ib66Onx4.png

注意: 1.函数名字不需要加括号 2.定时器返回的是一个 id数字

2)关闭定时器

image_sYGRvbdJs3.png

注意: 1.函数名字不需要加括号 2.定时器返回的是一个 id数字

综合案例

1.DOM的使用

<body>
    <div>你好啊</div>
    <button>按钮</button>
    <script>
        let inputDom = document.querySelector('div');
        console.dir(inputDom)
        let buttonDom = document.querySelector('button');
        console.dir(buttonDom)
    </script>
</body>

2.动态修改DOM元素内容

<body>
    <h1>午饭吃什么?</h1>
    <h2>不知道</h2>

    <script>
        let foodName = prompt('输入你想吃的东西');
        let h2Dom = document.querySelector('h2');
        h2Dom.innerText = foodName;
    </script>
</body>

3.随机修改DOM元素内容

<body>
    <h1>中午吃什么</h1>
    <h2>xxx</h2>
    <script>
        let foodName = ['麦当劳', '肯德基', '酸菜鱼', '麻辣烫', '韩式炸鸡', '尊宝披萨'];

        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min)) + min;
        }
        let random = getRandom(0, foodName.length - 1)

        let h2Dom = document.querySelector('h2');
        h2Dom.innerText = foodName[random]
    </script>
</body>

4.获取多个DOM元素

  <body>
    <ul>
      <li>0</li>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
    </ul>

    <div>123</div>

    <script>

      /* 
      querySelectorAll 不管你的选择器写对与否,返回值都是数组 
      querySelector  
        1 能找到 返回 dom元素 dom对象
        2 找不到了  返回null 
      
       */



      // querySelector 只能获取第一个符合要求的li标签
      // let li = document.querySelector('li');

      // 获取所有的li标签 返回一个数组
      // let lis = document.querySelectorAll('li');

      // // 数组就可以和循环搭配
      // for (let index = 0; index < lis.length; index++) {
      //   // lis[index]  dom元素

      //   // 文本
      //   lis[index].innerText = `这个是li标签 ` + index;
      // }

      // let divs = document.querySelectorAll('div');
      // console.log(divs); // 输出什么 ? 空数组!! 
      // console.log(divs); // 输出什么 [ div dom元素 ]  1个元素 


      console.log( document.querySelector("button") );
    </script>
  </body>

5.获取其他DOM元素的方式

 <body>
    <div id="nav">id选择器</div>
    <p>这个是p标签</p>
    <div class="container">也是div container</div>
    <script>

      // 根据id来获取  一个dom
      // let nav = document.getElementById("nav");
      // console.log(nav)

      // 根据 标签名称 来获取dom元素   一组dom元素
      // let ps=document.getElementsByTagName("p");
      // console.log(ps);

      // 根据 类名来获取元素 一组元素
      // let divs = document.getElementsByClassName("container");
      // console.log(divs);


      // 常用和方便 
      // 获取一个
      // document.querySelector("#nav")
      // document.querySelector("p")
      // document.querySelector(".container")

      // 获取一组
      // document.querySelectorAll


    </script>
  </body>

6.三种设置文本内容的方式

<body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
    </ul>

    <script>
      //  以后就很少用了 document.write 功能弱 只能把标签写在  /body  标签上面
      // document.write
      document.querySelector('li:nth-child(2)').innerText = '<button>随便修改</button> ';
      document.querySelector('li:nth-child(3)').innerHTML ='<button>随便修改</button> ';

      /* 
      3 种实现在标签中写 动态设置文本

      1  document.write 只能在body标签的中写 以后 很使用它
      2  innerText 只能设置文本,不能解析 html字符串
      3  innerHTML 可以设置文本 也可以解析html字符串 
      
       */

    </script>
  </body>

7.随机显示图片

<body>
    <img src="" alt="">
    <script>
        let imgName = [
            './images/01.jpg',
            './images/02.jpg',
            './images/03.jpg',
            './images/04.jpg',
            './images/05.jpg',
            './images/06.jpg'
        ];

        let i = Math.round(Math.random() * imgName.length - 1)

        let img = document.querySelector('img')
        img.src = `${imgName[i]}`

        
    </script>
</body>

8.设置元素样式

<body>
    <div>麦当劳</div>
    <script>
        let div = document.querySelector('div')
        div.style.fontSize = "100px";
        div.style.color = "yellow";
        div.style.backgroundColor = "red";
        div.style.width = "400px";
        div.style.height = "200px";
        div.style.lineHeight = "200px";
        div.style.textAlign = "center";
        div.style.margin = "100px auto"




        let colorName = [
            'lightseagreen',
            'cadetblue',
            'purple',
            'coral',
            'darkslateblue'
        ];

        let i = Math.round(Math.random() * (colorName.length - 1))

        let body = document.querySelector('body')
        body.style.backgroundColor = colorName[i]
    </script>

</body>

9.随机换背景色

<body>
    <script>
        function getRandomColor(min, max) {
            return Math.round(Math.random() * (max - min) + min)
        }
        let c1 = getRandomColor(0, 255)
        let c2 = getRandomColor(0, 255)
        let c3 = getRandomColor(0, 255)

        document.body.style.backgroundColor = `rgb(${c1},${c2},${c3})`
    </script>
</body>

10.ClassName

<body>
    <div ></div>
    <script>  

    /* 
    className 
    会先清空这个dom的元素 旧的所有的类 然后再单独添加上 新的类 

    如果想要同时设置多个 class  以空格做分割即可 
    
     */


      // js的方式来动态添加上这个class
      let div = document.querySelector('div');
      // 通过 className 来设置类名即可

      // 同时设置两个类上去 
      div.className = 'box redCls';
    </script>
  </body>

11.ClassList操作类

<body>
    <div class="d1 d4">123</div>

    <script>
      // 添加一个class
      let div = document.querySelector('div');

      // div.className="d2";
      // classList 添加一个类
      div.classList.add("d2","d3","d4");
      // div.classList.add("d2");
      // div.classList.add('d3');

      // 单独来指定移除一个class
      div.classList.remove("d2","d3")

      // 切换 (如果本来有,那我就移除  , 如果本来没有,那我就添加)
      div.classList.toggle("d4")
    </script>
  </body>

12.页面刷新更改背景图片

<body>
    <script>
        let randomBackgroundImage = [
            './images/01.jpg',
            './images/02.jpg',
            './images/03.jpg',
            './images/04.jpg',
            './images/05.jpg',
            './images/06.jpg'
        ];

        let i = Math.round(Math.random() * (randomBackgroundImage.length - 1))
        let img = document.querySelector('img')
        document.body.style.backgroundImage = `url(${randomBackgroundImage[i]})`
    </script>
</body>

13.定时器的基本使用

<body>
    <script>
      // 函数 负责 定时执行的业务
      // function repeat() {
      //   console.log('前端程序员,头发多');
      // }

      // 每隔一秒执行一次函数
      // 时间单位 毫秒  1000毫秒=1秒
      // setInterval(repeat, 1000);



      // 其他模样的写法
      // setInterval(匿名函数,1000);
      setInterval(function(){
        console.log("头发没有啦");
      },1000);

    </script>
  </body>

14.清除定时器

<body>
    <script>
      // 开启了一个定时器 会返回 定时器id
      // 不需要关心 这个定时器的id 等于多少, 有id
      // let timeId = setInterval(function () {
      //   console.log('准备吃晚饭');
      // }, 1000);

      // // console.log(timeId);

      // // 清除定时器 一般都是要根据某个条件来清除
      // clearInterval(timeId);

      // 追女孩子  追30次 不行 我就撤退!!

      let index = 0;

      // 创建定时器的同时 返回了定时器id
      let timeId = setInterval(function () {
        index++;
        console.log('开始追了', index);
        // 判断是否满足条件了
        if (index === 30) {
          // 放弃 没有缘分
          clearInterval(timeId);
        }
      }, 100);
    </script>
  </body>