Javascript-DOM

121 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

一,DOM简介

1.什么是DOM

在这里插入图片描述

2.DOM树

在这里插入图片描述

注意:DOM把以上内容都看做是对象,所以使用时也是按照对象的方法使用:变量.属性

二,获取元素

获取元素方式

在这里插入图片描述

1.通过ID获取

使用getElementById()方法获取带有ID的元素对象

语法:var 变量 = document.getElementById('ID'); document为文档的意思,此格式意为从文档中寻找获取

注意:

  • get 获得 element 元素 by 通过 用的是驼峰命名法
  • 参数id是大小写敏感的字符串
  • 返回的是一个元素对象

2.通过标签名获取

使用getElementByTagName()方法返回带有指定标签名的对象的集合

语法:**var 变量 = document.getElementByTagName('标签名');

注意:

  • 返回的是获取过来的元素对象的集合,以伪数组的形式存储,想要依次打印里面的元素对象,可以采用遍历的方式
  • 得到的元素对象是动态的(标签元素发生变化时,获取过来的也会变化)

还可以获取某个元素(父元素)内部所有指定标签名的子元素:

语法

 //获取的ol父元素返回的是伪数组
 var ol = document.getElementsByTagName('ol');
//获取子元素时,必须指明单个父元素,这里用ol[0]表示第一个ol父元素
 console.log(ol[0].getElementsByTagName('li'));

注意

  • 父元素必须是单个对象(必须指明是哪一个元素对象)
  • 获取的时候不包括父元素自己

3.通过HTML5新增的方法获取

根据类名返回元素对象集合

//根据类名返回元素对象集合
document.getElementsByClassName('类名');      

根据指定选择器返回元素对象

 //根据指定选择器返回第一个元素对象
document.querySelector('选择器');
//根据指定选择器返回所有元素对象
document.querySelectorAll('选择器'); 

注意: querySelector 里面的选择器前面要加符号,若选择器为ID则加#,为类名加. 为标签时不加

4.特殊元素获取

获取body标签:直接document.body

var bodyEle = document.body;

获取HTML标签:使用document.documentElement

 var htmlEle = document.documentElement;

三,事件基础

1.事件概述

在这里插入图片描述

2.事件三要素:事件源,事件类型,事件处理程序

01.事件源:事件被触发的对象 02.事件类型:如何触发,什么事件比如鼠标点击(onclick),鼠标经过等

常见鼠标事件: 在这里插入图片描述

03.事件处理程序:通过一个函数赋值的方式完成

例子:点击一个按钮弹出对话框

//因为js是从上往下执行,所以元素应在获取元素前,这也是<script></script>
//在body里面,button下面的原因
//后面会学到把<script></script>提到前面的做法
<body>
    <button id="btn">我是按钮</button>
    <script>
      //获取元素 btn为事件源
      var btn = document.getElementById('btn');
      //事件类型  事件处理程序
      btn.onclick = function() { 
            alert('点我干嘛');
        }
    </script>
</body>

3.执行事件的过程

01.获取事件源 02.注册事件(绑定事件) 03.添加事件处理程序(采用函数赋值形式)

<body>
    <button id="btn">我是按钮</button>
    <script>
      //获取元素 btn为事件源
      var btn = document.getElementById('btn');
      //事件类型  btn.onclick 
      //事件处理程序
      btn.onclick = function() { 
            alert('点我干嘛');
        }
    </script>
</body>

四,操作元素

Javascript的DOM操作可以改变网页内容,结构和样式,可以利用DOM操作元素来改变元素里面的内容,属性等

1.改变元素内容(常用)

==innerText== ==innerHTML==在这里插入图片描述

案例:1.点击按钮后按钮上文字发生变化 2.直接改变p中的内容


<body>
    <button id="btn">我是按钮</button>
    <p>我我我</p>
    <script>
    	//1
        var btn = document.getElementById('btn'); 
        btn.onclick = function() { 
           // btn.innerText = '点我干嘛';
            btn.innerHTML = '点我干嘛';//常用innerHTML
        }
		//2
         var p = document.querySelector('p');
        p.innerHTML = '你你你你';
    </script>

</body>

注意:

  • innerText不识别HTML标签
  • innerText和innerHTML是可读写的,可获取元素里面的内容

2.修改元素属性

常用元素的属性操作:src(图片),href(链接),id,alt,title等

通过格式:获取的元素.属性='新的值' 来改变元素属性

3.修改表单元素的属性

利用DOM可以操作的表单元素的属性:type value checked selected disabled等

  • 表单里面的文字内容是通过value修改的
  • ==想要某个表单(按钮)被禁用不能再点击,可用disabled:令btn.disabled=true 则btn就被禁用了==
  • input中 type="password"时为密码框,type="text"时为文本框

4.修改样式属性

可以通过JS修改元素的大小,颜色,位置等样式

element.style 行内样式操作

(使用后产生的是行内样式,权重较高) --------格式:需要修改的元素对象.style.样式属性
--------样式属性采取驼峰命名法:如backgroundColor

element.className 类名样式操作

当需要修改的样式过多时再用element.style就会生成很多的行内样式

为解决这种情况,我们可以直接先写一个新的类名,其中添加要修改成为的样式

然后用:需要修改的元素对象.className='新的类名'; 即可把该新类名覆盖样式的原类名,实现样式修改的操作

若不想完全覆盖原类名可以这样写: 需要修改的元素对象.className='原类名 新的类名';

5.操作元素总结

在这里插入图片描述

6.排他思想

在这里插入图片描述

    <button>按钮</button>
    <button>按钮</button>
    <button>按钮</button>
    <button>按钮</button>
    <button>按钮</button>
    <script>
    	//1.获取所有按钮元素
        var btns = document.getElementsByTagName('button');
        //btns得到的是伪数组  里面的每一个元素btns[i]
        for (var i = 0; i < btns.length; i++) {
        //2.首先排除其他人,然后再设置自己的样式   排他思想
            btns[i].onclick = function() {
                //先把所有的按钮背景颜色去掉  干掉所有人
                for (var i = 0; i < btns.length; i++) {
                    btns[i].style.backgroundColor = '';
                }
                //然后才让当前点击的元素背景颜色改变  留下我自己 
                this.style.backgroundColor = 'pink';
            }
        }
    </script>

7.自定义属性操作

01.获取属性值

在这里插入图片描述

    <div id="div" index="1"></div> //index为自定义属性
    <script>
        var div = document.querySelector('div')
        //getAttribute可以获得自定义的属性值
        console.log(div.getAttribute('index')); //1

        //获取元素自带属性的值时两种方法等价
        console.log(div.id); //div
        console.log(div.getAttribute('id')); //div
    </script>

02.设置移除自定义属性

设置修改属性值

在这里插入图片描述

移除属性
  • element.removeAttribute('属性');
  • 可以直接删掉属性和值

03.H5自定义属性

为使能一眼判断出属性是不是自定义的 H5提出了规范:以data-开头的为自定义变量

在这里插入图片描述在这里插入图片描述

 <div getTime="10" data-index="1" data-list-name="Tom"></div>
    <script>
        var div = document.querySelector('div');
        //由于不知道getTime是不是自定义属性,用传统方法可能会出错
        console.log(div.getTime); //undefined
        //用传统方法不对,此时再用getAttribute获取自定义变量 
        //存在试错,费时间
        console.log(div.getAttribute('getTime')); //10
        //为使能一眼判断出属性是不是自定义的
        //H5提出了规范:以data-开头的为自定义变量
        //dataset是一个集合 里面存放了所有以data开头的自定义属性
        //h5新增的获取自定义的方法只能获取data开头的
        console.log(div.dataset.index); //1
        console.log(div.dataset['index']); //1

        //如果自定义属性里面有多个-链接的单词,获取的时候采取驼峰命名法
        console.log(div.dataset.listName); //Tom
        console.log(div.dataset['listName']); //Tom
    </script>

注意:

  • h5新增的获取自定义的方法只能获取data开头的
  • 如果自定义属性里面有多个-链接的单词,获取的时候采取驼峰命名法
  • H5新增的获取自定义变量的方法 ie11才开始支持

五,节点操作