JavaScript DOM

目录

目标

DOM 简介

什么是 DOM

DOM 树

获取元素

根据 ID 获取元素

根据标签名获取元素

根据父元素获取内部所有指定标签名的子元素

H5 新增获取元素方式

根据类名获取元素

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

根据指定选择器返回

总结

获取特殊元素(body,html)

获取 body 元素

获取 html 元素

事件基础

事件概述

事件三要素

执行事件的步骤

常见的鼠标事件

分析事件三要素

操作元素

改变元素的内容

innerText 和 innerHTML 的区别

常用元素的属性操作

修改元素属性

案例:分时显示不同图片,显示不同的问候语

修改表单元素

仿京东显示隐藏密码明文案例


目标

  • 能够说出什么是 DOM
  • 能够获取页面元素
  • 能够给元素注册事件
  • 能够操作 DOM 元素的属性
  • 能够创建元素
  • 能够操作 DOM 节点

DOM 简介

什么是 DOM

  • 文档对象模型(Document Object Model,简称 DOM)
  • W3C 组织推荐的处理可扩展标记语言( HTML 或者 XML )的标准编程接口
  • W3C 已经定义了一系列的 DOM 接口
  • 通过这些 DOM 接口可以改变网页的内容、结构和样式

DOM 树

  • 文档:一个页面就是一个文档,DOM 中使用 document 表示
  • 元素:页面内所有标签都是元素,DOM 中使用 element 表示
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示
  • DOM 将以上内容都看作是对象
  • DOM 在实际开发中主要用来操作元素

获取元素

获取页面中的元素可以使用以下几种方式:

  • 根据 ID 获取
  • 根据标签名获取
  • 通过 HTML5 新增的方法获取
  • 特殊元素获取

根据 ID 获取元素

  • 使用 getElementById() 方法可以获取带有 ID 的元素对象
  • getElementById() 方法返回一个匹配特定 ID 的元素
  • 由于元素的 ID 在大部分情况下要求是独一无二的,此方法可以高效查找特定元素
<body>
    <div id='time'>2021-07-19</div>
    <!-- 因为文档页面从上往下加载,所以 script 写在标签的下面 -->
    <script>
        // get 获得;element 元素;by 通过。驼峰命名法
        // 参数:大小写敏感的字符串
        // 返回值:一个匹配到 ID 的 DOM Element 对象
        // 若在当前 Document 下没有找到,则返回 null 
        var str = document.getElementById('time');
        console.log(str);
        // 返回的是一个元素对象 object
        console.log(typeof str);
        // console.dir():打印返回的元素对象,更好地查看里面的属性和方法
        console.dir(str);
    </script>
</body>

根据标签名获取元素

  • 使用 getElementsByTagName() 方法可以返回带有指定标签名对象的集合
  • Elements:指定某标签名的所有元素(标签)
  • 无论页面中有几个该标签,返回的都是伪数组;如果没有该标签,返回空的伪数组
<body>
    <ul>
        <li>大漠孤烟直</li>
        <li>长河落日圆</li>
        <li>萧关逢侯骑</li>
        <li>督护在燕然</li>
    </ul>

    <script>
        // 返回的是获取过来的元素对象的集合,以伪数组的形式存储
        var lis = document.getElementsByTagName('li');
        console.log(lis); // HTMLCollection(4) [li, li, li, li]

        // 打印该标签名的某一个元素(标签)对象
        console.log(lis[1]);
        // 依次打印该标签名的所有元素(标签)对象
        for (var i = 0; i < lis.length; i++) {
            console.log(lis[i]);
        }
    </script>

注意:

  • 因为得到的是一个对象的集合,所以想要操作里面的元素需要遍历
  • 得到的元素对象是动态的
  • 所谓的动态:当标签所包含的内容发生改变,得到的元素对象也将改变

根据父元素获取内部所有指定标签名的子元素

  • element.getElementById('标签名')
  • 父标签名.getElementById('子标签名')
  • 父元素必须是单个对象(必须指明是哪一个元素对象)
  • 获取的时候不包括父元素自己
<body>
    <ul>
        <li>大漠孤烟直</li>
        <li>长河落日圆</li>
        <li>萧关逢侯骑</li>
        <li>督护在燕然</li>
    </ul>

    <ol id='ol'>
        <li>白日依山尽</li>
        <li>黄河入海流</li>
        <li>欲穷千里目</li>
        <li>更上一层楼</li>
    </ol>
    <script>
        // 根据父元素获取内部所有指定标签名的子元素
        // element.getElementsByTagName('标签名')
        var ol = document.getElementsByTagName('ol'); // [ol]
        // 不能直接使用 ol.getElementsByTagName('li')
        // 因为 ol 是伪数组的 元素,不是具体的单个元素,可能多个
        // console.log(ol.getElementsByTagName('li'));

        // 父元素必须是指定的单个元素 ol[i]
        console.log(ol[0].getElementsByTagName('li')); // HTMLCollection(4) [li, li, li, li]

        // 一般情况下使用 id 获取元素
        var ol = document.getElementById('ol');
        console.log(ol.getElementsByTagName('li')); // HTMLCollection(4) [li, li, li, li]
    </script>
</body>

H5 新增获取元素方式

根据类名获取元素

  • document.getElementsByClassName('类名')
  • 根据类名返回元素对象集合
<body>
    <div class="box"></div>
    <div class="box"></div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        // getElementsByClassName() 
        // 根据类名获得某些元素集合
        var boxs = document.getElementsByClassName('box');
        console.log(boxs); // HTMLCollection(2) [div.box, div.box]
    </script>
</body>

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

  • document.querySelector('选择器')
  • 根据指定选择器返回第一个元素对象
<body>
    <div class="box"></div>
    <div class="box"></div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        // document.querySelector('选择器')
        // 返回指定选择器的第一个元素对象
        // ('选择器') 需要加符号 类(.) id (#) 标签()
        var firstBox = document.querySelector('.box'); // 类选择器
        console.log(firstBox);

        var nav = document.querySelector('#nav'); // id 选择器
        console.log(nav);

        var li = document.querySelector('li'); // 标签选择器
        console.log(li);
    </script>

根据指定选择器返回

  • document.querySelectorAll('选择器')
  • 返回指定选择器的所有元素对象集合
<body>
    <div class="box"></div>
    <div class="box"></div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        // document.querySelectorAll('选择器')
        // 返回指定选择器的所有元素对象集合
        var allBox = document.querySelectorAll('.box'); // NodeList(2) [div.box, div.box]
        console.log(allBox);

        var Allli = document.querySelectorAll('li'); // NodeList(2) [li, li]
        console.log(Allli);
    </script>
</body>

总结

  • document.getElementsByClassName('类名')     根据类名返回元素对象集合
  • document.querySelector('选择器')     根据指定选择器返回第一个元素对象
  • document.querySelectorAll('选择器')     返回指定选择器的所有元素对象集合

获取特殊元素(body,html)

获取 body 元素

  • var bodyEle = document.body;
<body>
    <script>
        // 获取 body 元素
        var bodyEle = document.body;
        // 打印 body 标签
        console.log(bodyEle);
        // 返回的是一个元素对象
        console.dir(bodyEle);
    </script>
</body>

获取 html 元素

  • var htmlEle = document.documentElement;
<body>
    <script>
        // 获取 html 元素
        var htmlEle = document.documentElement;
        // 打印 html 标签
        console.log(htmlEle);
        // 返回的是一个元素对象
        console.dir(htmlEle);
    </script>
</body>

事件基础

事件概述

  • JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为
  • 简单理解:触发 --- 响应的机制
  • 网页中每一个元素都可以产生某些可以触发 JavaScript 的事件
  • 例如:我们可以在用户点击某个按钮时产生一个事件,然后去执行某些操作

事件三要素

  • 事件由三部分组成:事件源、事件类型、事件处理程序
  • 事件源:事件被触发的对象  谁  比如:按钮
  • 事件类型:事件触发的方式  什么事件
  • 比如:鼠标点击(onclick),鼠标经过,鼠标按下
  • 事件处理程序:通过函数赋值的方式完成
<body>
    <button id="btn">炸弹</button>
    <script>
        // 点击一个按钮,弹出对话框
        // 事件由三部分组成: 事件源  事件类型  事件处理程序
        // 上述三部分也被称为事件三要素

        // 1.事件源:事件被触发的对象  谁  按钮
        var btn = document.getElementById('btn');

        // 2.事件类型:如何触发  什么事件
        // 比如鼠标点击(onclick)  鼠标经过  鼠标按下

        // 3.事件处理程序:通过一个函数赋值的方式 完成
        btn.onclick = function() {
            alert('boom!');
        }
    </script>
</body>

执行事件的步骤

  • 获取事件源
  • 注册事件(绑定事件)
  • 添加事件处理程序(采取函数赋值形式)
<body>
    <div>点击div</div>
    <script>
        // 执行事件步骤
        // 点击 div, 控制台输出 'div 已被选中'
        // 1.获取事件源
        var div = document.querySelector('div');
        // 2.注册事件 绑定事件
        // div.onclick
        // 3.添加事件处理程序
        div.onclick = function() {
            alert('div 被选中了!');
        }
    </script>
</body>

常见的鼠标事件

鼠标事件触发条件
onclick鼠标点击触发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发

分析事件三要素

  • 下拉事件三要素
  • 关闭广告三要素

操作元素

  • JavaScript 的 DOM 操作可以改变网页内容、结构和样式
  • 可以利用 DOM 操作元素来改变元素中的内容、属性等
  • 注意以下都是属性

改变元素的内容

  • element.innerText
  • 从起始位置到终止位置的内容,但去除 html 标签,同时空格和换行也会去掉
<body>
    <button>显示当前时间</button>
    <div>0000-00-00</div>
    <p>现在是北京时间:</p>
    <script>
        // 点击按钮,div 中的内容会改变
        // 1.获取事件源(元素)
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        // 2.注册事件
        // btn.onclick
        // 3.添加事件处理程序
        btn.onclick = function() {
            // div.innerText = '2021-07-19';
            div.innerText = getDate();
        }

        function getDate() {
            var date = new Date();
            // 输出当前时间:年月日星期
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var dates = date.getDate();
            var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
            var days = arr[date.getDay()];
            var str = '日期:' + year + '年' + month + '月' + dates + '日 ' + days;
            return str;
        }

        function getTime() {
            var time = new Date();
            // 输出当前时间:时分秒
            var hours = time.getHours();
            hours = hours < 10 ? '0' + hours : hours;
            var minutes = time.getMinutes();
            minutes = minutes < 10 ? '0' + minutes : minutes;
            var seconds = time.getSeconds();
            seconds = seconds < 10 ? '0' + seconds : seconds;
            return hours + ':' + minutes + ':' + seconds;
        }

        // 元素也可以不添加事件,直接获取
        var p = document.querySelector('p');
        p.innerText = getTime();
    </script>
</body>
  • element.innerHTML
  • 起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行

innerText 和 innerHTML 的区别

  • innerText 不识别 html 标签,非标准
  • 去除空格和换行
  • innerHTML 识别 html 标签,W3C 标准
  • 保留空格和换行
  • innnerHTML 更常用
<body>
    <div></div>
    <p>
        飞流直下三千尺
        <span>1234567</span>
    </p>
    <script>
        // interText 和 innerHTML 的区别
        // 1.innerText 不识别 html 标签 非标准
        // 去除空格和换行
        var div = document.querySelector('div');
        div.innerText = '<strong>今天是</strong> 2021-07-19';

        // 2.innerHTML 识别 html 标签 W3C标准
        // 保留空格和换行
        div.innerHTML = '<strong>现在是北京时间:</strong> 18点整';

        // 这两个属性都是可读写的,除了可以给它们赋值外,还可以获取元素的内容
        var p = document.querySelector('p');
        console.log(p.innerText); // 飞流直下三千尺 1234567
        console.log(p.innerHTML);
        // 飞流直下三千尺
        // <span>1234567</span>  
    </script>
</body>

常用元素的属性操作

  • innerText、innerHTML:改变元素内容
  • src、href:图片和链接
  • id、alt、title

修改元素属性

  • img.src = '图片地址';
  • img.title = '鼠标移至图片上现实的文字内容';
<body>
    <button id="ldh">刘德华</button>
    <button id="zxy">张学友</button><br>
    <img src="images/ldh.png" alt="" title="刘德华">

    <script>
        // 修改元素属性 src
        // 1.获取元素
        var ldh = document.getElementById('ldh');
        var zxy = document.getElementById('zxy');
        var img = document.querySelector('img');

        // 2.注册事件
        // zxy.onclick
        // 3.添加事件处理程序
        zxy.onclick = function() {
            // 修改 img 的 src 属性
            img.src = 'images/zxy.png';
            // 修改 img 的 title 属性 
            img.title = '张学友';
        }
        ldh.onclick = function() {
            img.src = 'images/ldh.png';
            img.title = '刘德华';
        }
    </script>
</body>

   

案例:分时显示不同图片,显示不同的问候语

  • 根据系统不同时间来判断,所以需要用到日期内置对象
  • 利用多分支语句来设置不同的图片
  • 需要一个图片,并且根据时间修改图片,需要操作元素 img 的 src 属性
  • 需要一个 div 元素,显示不同的问候语,修改元素内容即可
<body>
    <img src="images/s.gif" alt="">
    <div>Good morning</div>
    <script>
        // 根据系统不同时间来判断,所以需要用到日期内置对象
        // 利用多分支语句来设置不同的图片
        // 需要一个图片,并且根据时间修改图片,需要操作元素 img 的 src 属性
        // 需要一个 div 元素,显示不同的问候语,修改元素内容即可

        // 获取元素
        var img = document.querySelector('img');
        var div = document.querySelector('div');
        // 得到当前的小时数
        var date = new Date();
        var hours = date.getHours();
        // 判断小时,改变图片和文字信息
        if (hours < 12) {
            img.src = 'images/s.gif';
            div.innerHTML = '一日之计在于晨,加油!';
        } else if (hours < 19) {
            img.src = 'images.x.gif';
            div.innerHTML = '奋斗在此时,前进吧!';
        } else {
            img.src = 'images/w.gif';
            div.innerHTML = '晚安,好梦!';
        }
    </script>
</body>

修改表单元素

  • 利用 DOM 可以操作如下表单元素的属性
  • type、value、checked、selected、disabled(被禁用)
  • 表单元素的值是通过 value 属性进行更改的
  • 比如:input.value = '正在搜索...';
<body>
    <input type="text" value="输入内容">
    <button>按钮</button>

    <script>
        // 表单元素的值是通过 value 属性进行更改
        // 表单元素包括:type、value、checked、selected、disabled 等
        // 1.获取元素
        var btn = document.querySelector('button');
        var input = document.querySelector('input');
        // 2.注册事件
        // 3.添加事件处理程序
        btn.onclick = function() {
            // input.innerHTML = '正在搜索...';  innerHTML 是普通盒子才有的操作;比如 div, p 等标签
            // 表单中的元素值是通过 value 值修改的
            input.value = '正在搜索...';

            // 想要某个表单元素被禁用,不能再点击 disabled
            // btn.disabled = true;
            this.disabled = true;
            // this 指向的是事件函数的调用者
            // btn调用此事件函数,因此 this 指向 btn 
        }
    </script>
</body>

  

仿京东显示隐藏密码明文案例

案例分析

  • 核心思路:点击眼睛按钮,把密码框改为文本框
  • 一个按钮两个状态,点击一次,切换为文本框;在点击一次,切换为密码框
  • 算法:利用一个 flag 变量
  • 判断 flag 的值,如果是 1 就切换为文本框,flag = 0
  • 如果是 0 就切换为密码框,flag = 1
<body>
    <div class="box">
        <label for="">
            <img src="images/close.png" alt="" id="eye">
        </label>
        <input type="password" name="" id="pwd">
    </div>

    <script>
        // 1.获取元素
        var eye = document.getElementById('eye');
        var pwd = document.getElementById('pwd');

        // 2.注册事件,添加事件处理程序
        var flag = 0;
        eye.onmousedown = function() {
            // 点击一次之后,flag 值发生变化
            if (flag == 0) {
                pwd.type = 'text';
                eye.src = 'images/open.png';
                flag = 1; // 赋值操作
            } else {
                pwd.type = 'password';
                eye.src = 'images/close.png';
                flag = 0;
            }
        }
    </script>
</body>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值