【无标题】

本文详细介绍了如何在JavaScript中通过DOM操作改变网页内容、元素属性(如src,href,id等)和样式,包括innerText和innerHTML的区别,以及如何处理表单元素、样式属性和实现特定功能如显示隐藏内容、关闭元素等实例。

4.操作元素

JavaScript 的DOM操作可以改变网页内容,结构和样式,我们可以使用DOM操作元素来改变元素里面的内容属性等。
注意一下属性

4.1改变元素内容

element.innerText

从起始位置到终止位置的内容,但它除去html标签,同时空格和换行也会去掉。

element.innerHTML

起始位置到终止位置的全部内容,包括htlm标签,同时保留空格和换行
使用的比较多

<style>
        div,
        p {
            width: 300px;
            height: 30px;
            line-height: 30px;
            color: #fff;
            background-color: pink;
        }
</style>
<body>
    <button>显示当前系统时间</button>
    <div>某个时间</div>
    <p>123</p>
    <script>
        //当我们点击了按钮,div里面的文字会发生变化
        //1.获取元素
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        //2.注册事件
        btn.onclick = function () {
            div.innerText = getData();
        }

        function getData() {
            //格式化日期 年月日
            var date = new Date();
            //我们写一个2019年 5月1日 星期三
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var dates = date.getDate();
            var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
            var value = date.getDay();
            return '今天是:\t' + year + '年' + month + '月' + dates + '日 ' + arr[value];
        }
        // 我们元素可以不要添加事件
        var p = document.querySelector('p');
        p.innerText = getData();
    </script>
</body>
<body>
    <div></div>
    <p>
        我是文字
        <span>123</span>
    </p>
    <script>
        //innerText 和 innerHTML 的区别
        // 1.innnerText 不识别html标签 非标准 去除空格和换行
        var div = document.querySelector('div');
        div.innerText = '<Strong>今天是</string>:2023';
        // 2.innerHTML W3C标准
        div.innerHTML = '<Strong>今天是</strong>:2023';
        //这个;两个属性是可读写的 可以获取元素里面的内容 保留空格和换行
        var p = document.querySelector('p');
        console.log(p.innerText);
        console.log(p.innerHTML);
    </script>
</body>

4.2常用元素的属性操作

  1. innerText,innerHTML 改变元素内容
  2. src,href
  3. id,alt,title
<body>
    <button id="ldh">刘德华</button>
    <button id="zxy">张学友</button>
    <img src="../images/ldh.jpg" alt="" title="刘德华">
    <script>
        //修改元素属性 src
        //1.获取元素
        var ldh = document.getElementById('ldh');
        var zxy = document.getElementById('zxy');
        var img = document.querySelector('img');
        //2.注册事件 处理程序
        zxy.onclick = function () {
            img.src = '../images/zxy.jpg';
            img.title = '张学友';
        }
        ldh.onclick = function () {
            img.src = '../images/ldh.jpg';
            img.title = '刘德华';
        }
    </script>
</body>

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

根据不同时间,页面显示不同图片,同时显示不同的问候语。
如果上午时间打开页面,显示上午好,显示上午的图片。
如果下午时间打开页面,显示下午好,显示下午的图片。
如果晚上时间打开页面,显示晚上好,显示晚上的图片。

案例分析

  1. 根据系统不同时间来判断,所以需要用到日期内置对象
  2. 利用多分支语句来设置不同的图片
  3. 需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性
  4. 需要一个div元素,显示不同问候语,修改元素内容即可。
 <style>
        img {
            width: 300px;
        }
    </style>
    <body>
    <img src="../images/sw.jpg" alt="">
    <div>上午好</div>
    <script>
        // 1. 根据系统不同时间来判断,所以需要用到 ** 日期内置对象 **
        // 2. 利用 ** 多分支语句 ** 来设置不同的图片
        // 3. 需要一个图片,并且根据时间修改图片,就需要用到操作元素 ** src属性 **
        // 4. 需要一个div元素,显示不同问候语,修改 ** 元素内容 ** 即可
        //1.获取元素
        var img = document.querySelector('img');
        var div = document.querySelector('div');
        //2.得到当前的小时数
        var date = new Date();
        var h = date.getHours();
        h = 19
        //3.判断小时数,改变图片和文字信息
        if (h < 12) {
            img.src = '../images/sw.jpg';
            div.innerHTML = '亲,上午,好好写代码!';
        } else if (h < 18) {
            img.src = '../images/xw.jpg';
            div.innerHTML = '亲,下午,好好写代码!';
        } else {
            img.src = '../images/ws.jpg';
            div.innerHTML = '亲,晚上,好好写代码!';
        }
    </script>
</body>

4.3表单属性的属性操作

使用DOM可以操作如下表单元素的属性:

type,value,checked,selected,disabled
<body>
    <button>按钮</button>
    <input type="text" value="输入内容">
    <script>
        // 1.获取元素
        var btn = document.querySelector('button');
        var input = document.querySelector('input');
        //2.注册事件 处理程序
        btn.onclick = function () {
            // input.innerHTML = '点击了'; 这个是普通盒子 比如div 标签里面的内容
            // 表单里面的值 文字内容是通过 value 来修改的
            input.value = '被点击了';
            //如果想要某个表单被禁用 不能再点击 disabled 我们想要这个按钮 button禁用
            // btn.disabled = true;
            this.disabled = true;
            //this 指向的是事件函数的调用者
        }
    </script>
</body>

仿京东显示密码

点击按钮将密码框切换为文本框,并可以查看密码明文

案例分析

  1. 核心思路:点击眼睛按钮,把密码框类型改为文本框就可以看见里面的密码
  2. 一个按钮两个状态,点击一次,切换为文本框,继续点击一次切换为密码框
  3. 算法:使用一个flag变量,来判断flag的值,如果是1就切换为文本框,flag设置为0。如果是0就切换为密码框,flag设置为1。
<style>
        .box {
            position: relative;
            width: 400px;
            border-bottom: 1px solid #CCC;
            margin: 100px auto;
        }

        .box input {
            width: 370px;
            height: 30px;
            border: 0;
            outline: none;
        }

        .box img {
            position: absolute;
            top: 7px;
            right: 5px;
            width: 24px;
        }
    </style>
    <body>
    <div class="box">
        <label for=""></label>
        <img src="../images/eye2.jpg" alt="" id='eye'>
        <input type="password" name="" id='pwd'>
    </div>
    <script>
        // 1.获取元素
        var eye = document.getElementById('eye');
        var pwd = document.getElementById('pwd');
        // 2.绑定事件 注册事件 吃力程序
        var flag = 0;
        eye.onclick = function () {
            if (flag == 0) {
                pwd.type = 'text';
                eye.src = '../images/eye.jpg';
                flag = 1; //赋值操作
            } else {
                pwd.type = 'password';
                eye.src = '../images/eye2.jpg';
                flag = 0; //赋值操作
            }
        }
    </script>
</body>

4.4样式属性操作

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

1.element.style  行内样式操作
2.element.className  类名样式操作

注意
1.JS里面的样式采取驼峰命名法,比如fontSize,backgroundColor
2.JS修改style样式操作,产生的是行内样式,CSS权重比较高。
(1)如果样式修改比较多,可以采取操作类名方式更改元素样式
(4)class因为是个保留字,因此使用className来操作元素类型属性
(3)className 会直接更改元素的类名 ,会覆盖原先的类名。

案例:淘宝点击关闭二维码

当鼠标点击二维码关闭按钮的时候,则关闭整个二维码

案例分析

1.核心思路:使用样式的显示和隐藏完成,display:none隐藏元素 display:block显示元素
2.点击按钮,就让这个二维码盒子隐藏起来即可

<style>
        .box {
            position: relative;
            width: 75px;
            height: 85px;
            margin: 0 auto;
            background-color: aliceblue;
            font-size: 12px;
            text-align: center;
            color: #f40;
        }

        .box img {
            width: 60px;
            margin-top: 5px;
        }

        .close-btn {
            position: absolute;
            top: -1px;
            left: -16px;
            width: 14px;
            height: 14px;
            border: 1px solid #ccc;
            line-height: 14px;
            cursor: pointer;
        }
    </style>
    <body>
    <div class="box">
        淘宝二维码
        <img src="../images/tb.png" alt="">
        <i class="close-btn"></i>
    </div>
    <script>
        //1.获取元素
        var btn = document.querySelector('.close-btn');
        var box = document.querySelector('.box');
        //2.注册事件 程序处理
        btn.onclick = function () {
            box.style.display = 'none';
        }
    </script>
</body>

案例循环精灵图背景

可以利用for循环设置一组元素的精灵图背景

  1. 首先精灵图排列是有规律的
  2. 核心思路:使用for循环,修改精灵图的背景位置background-position
  3. 让每个图片的i索引号*400就是每个图片的坐标
<style>
        * {
            list-style: none;
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }

        .box {
            width: 1684px;
            margin: 0 auto;
        }

        li {
            float: left;
            width: 420px;
            height: 400px;
            margin: 1px;
            background-color: aqua;
            background: url(../images/jlt.png) no-repeat;

        }
        <body>
    <div class="box">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <script>
        //1.获取元素 所有的li
        var lis = document.querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            //让索引号*400 就是每个li的y坐标 index就是我们的y坐标
            var index = i * 402;
            lis[i].style.backgroundPosition = '0-' + index + 'px';
        }
    </script>
</body>
    </style>

案例 :显示隐藏文本框内容

当鼠标点击文本框时里面的默认文字隐藏,当鼠标离开文本框时,里面的文字显示

案例分析

  1. 首先表单需要2个新事件,获得焦点onfocus 失去焦点onblur
  2. 如果获得焦点,判断表单里面内容是否为默认文字,如果是默认文字,就清空表单内容
  3. 如果失去焦点,判断表单内容是否为空,如果为空,则表单内容改为默认文字
<style>
        input {
            color: #999;
        }
    </style>
    <body>
    <input type="text" value="手机">
    <script>
        //1.获取元素
        var text = document.querySelector('input');
        //2.注册事件 获得焦点事件 onfocous
        text.onfocus = function () {
            // console.log('得到了焦点');
            if (this.value === '手机') {
                this.value = '';
            }
            //获得焦点需要把文本框里面的文字颜色变黑
            this.style.color = '#333';
        }
        //3.注册事件 获得失去焦点 onblur
        text.onblur = function () {
            // console.log('失去了焦点');
            if (this.value === '') {
                this.value = '手机';
            }
            this.style.color = '#999';
        }
    </script>
</body>

案例:密码框格式提示错误信息

用户如果离开密码框,里面输入个数不是1-16,则提示错误信息,否则提示输入正确信息

案例分析

  1. 首先判断的事件是失去焦点 onblur
  2. 如果输入正确则提示正确的信息 颜色为绿色小图标变化
  3. 如果输入不是6-16位,则提示错误信息,颜色为红色 小图标变化
  4. 因为里面变化样式较多,我们采取className修改样式
 <style>
        .register {
            width: 600px;
            /* background-color: aqua; */
            margin: 100px auto;
        }

        .message {
            display: inline-block;
            font-size: 12px;
            color: #999;
            background: url(../images/tip.png) no-repeat left center;
            padding-left: 20px;
        }

        .wrong {
            color: red;
            background-image: url(../images/no.png);
        }

        .right {
            color: green;
            background-image: url(../images/yes.png);
        }
    </style>
    <body>
    <div class="register">
        <input type="password" class="ipt">
        <p class="message">请输入6-16位密码</p>
    </div>
    <script>
        // 1. 首先判断的事件是失去焦点 onblur
        // 2. 如果输入正确则提示正确的信息 颜色为绿色小图标变化
        // 3. 如果输入不是6 - 16位,则提示错误信息,颜色为红色 小图标变化
        // 4. 因为里面变化样式较多,我们采取className修改样式
        //1.获取元素
        var ipt = document.querySelector('.ipt');
        var message = document.querySelector('.message');
        //2.注册事件 失去焦点
        ipt.onblur = function () {
            // console.log('123');
            //根据表单里面值的长度 ipt.value.length
            if (this.value.length < 6 || this.value.length > 16) {
                // console.log('错误');
                message.className = 'message wrong';
                message.innerHTML = '您输入的位数不对 要求6-16位哦';
            } else {
                message.className = 'message right';
                message.innerHTML = '您输入正确!';
            }
        }

    </script>
</body>

4、操作元素总结

操作元素内容
1.innerText
2.innerHTML
操作常见元素属性
1.src,href,titlte,alt等
操作表单元素属性
1.type,value,disabled等
操作元素样式属性

1.element.style
2.className

作业

1.世纪佳缘 用户 显示隐藏你内容
2.京东关闭广告(直接隐藏即可)
3.新浪下拉菜单(微博即可)
4.开关灯案例(见素材)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值