DOM(文档对象模型)

目录

1、DOM是什么

2、DOM 树

3、节点

4、获取元素 

4.1、根据id获取

4.2、根据标签名获取

4.3、根据 name 属性来获取

4.4、根据类名来获取

4.5、根据选择器获取

4.6、获取body元素

4.7、获取html元素

5、操作元素

5.1、改变内容

5.2、元素属性

5.3、表单元素

5.4、样式元素

5.4.1、style

5.4.2、className属性

5.5、操作属性、

5.5.1、setAtrribute()

5.5.2、getAttribute()

5.5.3 removeAttibute()

5.5.4、自定义属性

6、DOM事件

6.1、什么是事件

6.2、事件的要素

6.3、常见鼠标事件类型


1、DOM是什么

DOM Document Object Model ,文档对象模型),是用来呈现以及与任意 HTML XML 文档交互的API Application Program Interface ,应用程序接口)。 DOM 是载入到浏览器中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。
DOM 是万维网上使用最为广泛的 API 之一,它允许运行在浏览器中的代码访问文件中的节点并与之交互。节点可以被创建,移动或修改。事件监听器可以被添加到节点上并在给定事件发生时触发。
DOM 并不是天生就被规范好了的,它是浏览器开始实现 JavaScript 时才出现的。这个传统DOM 有时会被称为 DOM 0 。现在, WHATWG 维护 DOM 现存标准。

2、DOM

DOM 树又叫文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。
文档:一个 HTML 页面就是一个文档,使用 document 表示

3、节点

节点是构成网页最基本的组成部分,网页中的所有内容在文档树中都是节点(标签、属性、文本、注释等),使用node 表示
(1) 标签节点:也叫元素节点,指网页中的所有标签,使用 element 表示;
(2)属性节点:指元素节点的属性;
(3)文本节点:指元素节点的内容

4、获取元素 

想要对 DOM 进行操作,首先需要获取页面中的元素,在 JavaScript 中,提供了以下几种获取页面元素的方法。

4.1、根据id获取

语法格式: var 元素对象 = document . getElementById ( "id 属性名称 " );
作用:通过页面中某个元素的 id 属性来获取这个元素对象。
返回 值:这个方法执行后会有一个返回值,如果获取到则返回当前对象,否则返回 null
示例:
    <div id="box">这是一个块</div>
    <script>
        var box = document.getElementById('box');
        console.log(box);
        console.log(typeof box);
    </script>

4.2、根据标签名获取

语法格式: var 返回对象集 = document . getElementsByTagName ( ' 标签名称 ' );
作用:根据指定的标称名称返回这些对象。
示例:
    <ul>
        <li>北京</li>
        <li>天津</li>
        <li>上海</li>
        <li>重庆</li>
    </ul>
    <script>
        var lis = document.getElementsByTagName('li');
        console.log(lis);
    </script>
除了可以使用 document 来引用这个方法外,还可以使用它父组对象来引用这个方法。
    <ul id="first">
        <li>北京</li>
        <li>天津</li>
        <li>上海</li>
        <li>重庆</li>
    </ul>
    <script>
        // 获取父级元素 
        var ul = document.getElementById('first');
        console.log(ul);
        // 通过父级元素来获取子元素 
        lis = ul.getElementsByTagName('li');
        console.log(lis);
    </script>

4.3、根据 name 属性来获取

语法格式: var 元素对象集 = document . getElementsByName ( 'name 属性名 ' )
作用:根据 name 属性来获取元素对象的集合。
示例:

    <p> <input type="checkbox" name="hobby" value="音乐">音乐
        <input type="checkbox" name="hobby" value="游戏">游戏
    </p>
    <script>
        var hobbies = document.getElementsByName('hobby');
        console.log(hobbies);
    </script>

4.4、根据类名来获取

语法格式: var 元素对象集 = document . getElementsByClassName ( ' 类名称 ' );
作用:根据元素的样式名称来获取元素集(也就是元素的 class 属性来获取)。
示例:
    <div class="box">div1</div>
    <div class="box">div2</div>
    <script>
        var divs = document.getElementsByClassName('box');
        console.log(divs);
    </script>

4.5、根据选择器获取

根据指定选择器获取元素对象有两种方式:一是获取单个,一是获取多个。
获取单个对象: var 元素对象 = document . querySelector ( ' 选择器名称 ' );
获取多个对象: var 元素对象 = document . querySelectorAll ( ' 选择器名称 ' );
示例:
    <div id="box1">有id的div</div>
    <div class="box2">有类样式的div</div>
    <div class="box2">有类样式的div</div>
    <p> <input type="text" name="account" value="xian">
        <input type="radio" name="gender" value="男">男
        <input type="radio" name="gender" value="女">女 </p>
    <script>
        // 根据标签获取 
        var div = document.querySelector('div');
        console.log(div);
        var divs = document.querySelectorAll('div');
        console.log(divs);
        // 根据id获取
        div = document.querySelector('#box1');
        console.log(div);
        // 根据类样式 
        divs = document.querySelectorAll('.box2');
        console.log(divs);
        // 根据属性选择器来获取 
        var gender = document.querySelectorAll('input[type="radio"]');
        console.log(gender);
    </script>

4.6、获取body元素

语法格式: document . body ;
作用:获取 body 中的所有元素
示例:

    <div class="box"></div>
    <input type="text" name="" id="">
    <h1>h1</h1>
    <script> 
        var body = document.body;
        console.log(body);
    </script>

4.7、获取html元素

语法格式: document . documentElement ;
作用:获取整个 html 元素。
示例:
   <div class="box"></div>
    <input type="text" name="" id="">
    <h1>h1</h1>
    <script>
        var html = document.documentElement;
        console.log(html);
    </script>

5、操作元素

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

5.1、改变内容

DOM 中改变元素内容通常使用元素的 innerText innerHTML 属性来实现。

 示例:

    <div class="box"> 今年是<strong>2022</strong>年第一天 </div>
    <script>
        // 1. 获取元素
        var box = document.querySelector('.box');
        console.log(box);
        // 2. 获取元素的内容 
        // 2.1 innerHTML 
        var content = box.innerHTML;
        console.log(content);
        // 2.2 innerText 
        var content = box.innerText;
        console.log(content);
        // 3. 设置元素内容 
        // 3.1 innerHTML 识别htm标签,同时保留空格和换行
        box.innerHTML = '<font color="red">这是红色的字</font>';
        // 3.2 innerText 不识别html标签,不保留空格和换行
        // box.innerText = '<font color="red">这是红色的字</font>';
    </script>
innerHTML和 innerText相同点:
(1)的 innerHTML innerText 属性可以获取对象的内容;
(2)通过给对象的 innerHTML innerText 属性赋值可以改变对象的内容。
innerHTML和 innerText区别:

(1)innerHTML属性会把内容中的 html 元素解析后再执行,而 innerText 不会解析内容中的 html 元素。

(2) 如果 innerText 用于获取对象的内容,当内容中包含有 html 元素时, 获取中它会把 这个元素给删除了,而innerHTML不会。
(3) 如果innerHTML用于设置对象的内容,当内容中包含有 html 元素时,它会把这些元素 原封不动的设置给对象(不删除空格和换行),而innerText会删除空格和换行。

5.2、元素属性

DOM 中,改变元素属性是通过 元素对象 . 属性名 的方式来实现的,它同样具有读写功能。元素可操作的常用属性有:src href id alt title 以及自定义属性等。

 演示案例:

    <img src="1.jpeg">
    <script>
        var img = document.querySelector('img')
            // 获取src属性 
        console.log(img.src);
        // 修改src属性 
        img.src = '2.jpeg';
        // 添加属性 
        img.alt = '图片';
        img.title = '提示';
        console.log(img);
    </script>

5.3、表单元素

Web 开发中,表单是一种常用的元素,利用 DOM 可以操作如下表单元素的属性。

 这些属性都具有读写操作,通过 元素对象.属性名 来获取元素属性值,通过 元素对象.属性名= 值 来设置元素属性值。而 checkedselecteddisabled 元素属性的值是布尔类型。

演示案例:

    <input type="text" name="name" value="123456"><br>
    <input type="checkbox" name=""><br>
    <select name="">
        <option value="">--请选择--</option> 
        <option value="北京">北京</option> 
        <option value="上海">上海</option>
         <option value="重庆">重庆</option> 
        </select>

    <script>
        var input = document.querySelector('input')
            // 获取type
        console.log(input.type);
        // 设置type 
        //input.type = 'password'; 
        // 获取value 
        console.log(input.value);
        // 设置value 
        input.value = 'jock'
            // 获取disabled 
        console.log(input.disabled);
        // false 
        // 设置 disabled 
        input.disabled = true;
        // 获取元素 
        var ck = document.querySelector('[type="checkbox"]');
        console.log(ck);
        // 获取选中状态 
        console.log(ck.checked); // false 
        // 设置选中状态 
        ck.checked = true;
        // 获取下拉列表
        var sl = document.querySelector('select');
        console.log(sl);
        //console.log(sl[2]);
        var op = sl[2];
        console.log(op.selected);
        // 设置被选中 
        op.selected = true;
    </script>

5.4、样式元素

DOM 中可以通过 JavaScript 来修改元素的大小、颜色和位置等样式。常用方式有:

5.4.1、style

示例:
    <style>
        .box {
            width: 150px;
            height: 100px;
            background-color: blueviolet;
        }
    </style>

    <div class="box"></div>
    <script>
        // 通过 JS 来改变 div 的宽和背景颜色 
        var box = document.querySelector('.box')
            //console.log(box); 
            // 通过 style 方式
        box.style.width = '300px';
        box.style.backgroundColor = 'red';
    </script>
注意:如果样式名称中包含有连接符(-),那么连接符要去掉,同时后面的字母要大写。

5.4.2、className属性

示例:

  
<style>
        .box {
            width: 150px;
            height: 100px;
            background-color: blueviolet;
        }
        
        .bg {
            width: 200px;
            height: 200px;
            background-color: cornflowerblue;
        }
        
        .ft {
            color: white;
        }
    </style>

    <div class="box">这是文字</div>
    <script>
        // 通过 JS 来改变 div 的宽和背景颜色 
        var box = document.querySelector('.box');
        console.log(box.className);
        box.className = 'bg ft'
    </script>

说明:

(1)通过对象.className 的方式可以获取当前对象的样式名称;

(2)通过对象.className='' 的方式可以给当前对象设置样式。

5.5、操作属性、

对属性的操作也可以设置属性值,也可获取属性值。

5.5.1、setAtrribute()

这个方法可以给元素设置属性。它的语法如下:

对象名称.setAttribute('属性名', '属性值');

示例:
     <style>
        div {
            width: 100px;
            height: 30px;
            border: 1px solid #000000;
        }
        
        .bg {
            background-color: cornflowerblue;
            color: white;
        }
    </style>

  <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div')
            // 设置属性 
        div.setAttribute('class', 'bg');
        div.setAttribute('title', '我改了标题');
    </script>

5.5.2、getAttribute()

这个方法是用于获取对象中的指定属性名称的值。它的语法如下:
属性值 = 对象 . getAttribute ( ' 属性名 ' ) ;
示例:
    <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div')
            // 获取title属性 
            //console.log(div.title); 
        var attrValue = div.getAttribute('title');
        console.log(attrValue);
    </script>

5.5.3 removeAttribute()

这个方法是用于删除对象中指定的属性。它的语法为:
对象 . removeAttribute ( ' 属性名 ' );
示例:
    <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div');
        // 删除title属性
        div.removeAttribute('title');
    </script>

5.5.4、自定义属性

自定义属性目的是为了保存并使用临时数据,这些数据不需要从数据库中获取。自定义属性是通过 setAttribute(' 属性 ', ' ') 来设置,通过 getAttribute(' 属性 ') 来获取。
由于有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性,为了解决这种问题,H5 中规定了自定义属性都以 data - 开头来作为属性名。
H5 中规定的属性定义方式可以使用 getAttribute(' 属性 ') 方式来获取,也可以使用 H5 中新增的属性获取方式来获取。

 示例:

    <div data-index="1" data-list-name="jock"></div>
    <script>
        var div = document.querySelector('div');
        console.log(div.getAttribute('data-index'));
        div.setAttribute('data-title', '标题');
    </script>

6、DOM事件

6.1、什么是事件

所谓事件是指文档或浏览器窗口中发生的一些特定的交互瞬间。 JavaScript HTML 之间的交互 就是通过事件来实现的。对于 Web 应用来说,鼠标点击,鼠标移动,按下键盘某个键都是属于事件。而这些相应操作就会触发相应的响应机制来进行事件处理。

6.2、事件的要素

对于事件来说,它包含三个要素:事件源、事件类型和事件处理程序。
(1)事件源:触发事件的元素.
(2)事件类型:触发了哪种类型的事件,如 click mouseover focus keyup 等。
(3)事件处理程序:事件触发后要执行的程序代码,通常是一个函数。
示例:
    <button id="btn">点我会触发事件</button>
    <script>
        // 1. 获取元素
        var btn = document.querySelector('#btn')
            // 1.事件源:这个按钮就是事件源 
            // 2. 事件类型:这个按钮要点击后才会触发,那么它的事件类型就是点击事件 
            // 3. 事件处理程序 
        btn.onclick = function() {
            console.log('你点了我');
        };
    </script>

6.3、常见鼠标事件类型

DOM 事件非常多,而这些事件中使用最多最频繁的就是鼠标事件,常用的鼠标事件如下表所示。

 示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常见鼠标事件类型</title>
    <style>
        .box {
            width: 150px;
            height: 100px;
            border: 1px solid #000000;
        }
        .bg {
            background-color: cornflowerblue;
        }
    </style>
</head>
<body>
<div class="box"></div>
<input type="text" id="account" value="123456">
<script>
    var box = document.querySelector('.box')
    // 单击事件:onclick
    /*box.onclick = function () {
        console.log('点我干嘛?');
    };
    // 双击事件:ondblclick
    box.ondblclick = function () {
        console.log('别烦我。');
    };
    */

    // 鼠标经过时触发:onmouseover
    box.onmouseover = function () {
        this.className = 'box bg';
    };
    // 鼠标离开时触发:onmouseout
    box.onmouseout = function () {
        this.className = 'box';
    };
    // 鼠标移动时触发:onmousemove
    box.onmousemove = function () {
        console.log('你摸我干嘛');
    };

    var input = document.querySelector('#account')
    // 获取鼠标焦点时触发:onfocus
    input.onfocus = function () {
        //console.log(this.value)
        this.style.backgroundColor = 'cornflowerblue';
    };
    // 失去鼠标焦点时触发:onblur
    input.onblur = function () {
        this.style.backgroundColor = '';
        console.log(this.value);
    };

    // 文本框内容改变时触发:onchange
    input.onchange = function () {
        console.log('内容已经被修改');
    };

    // 文本框内容被选中时触发:onselect
    input.onselect = function () {
        console.log('我不想当干部');
    };
</script>
</body>
</html>
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值