JavaScript DOM 获取与操作元素

获取与操作元素

1.getElementById

<body>
    <div id="time">2022-05-14</div>
    <script>
        //1.因为文档页面从上往下加载,所以先有标签,所以script写到标签的下面
        //2.get获得element 元素 by 通过 驼峰命名法
        //3.参数 id是大小写敏感的字符串
        //4.返回的是一个元素对象
        var timer = document.getElementById('time');
        console.log(timer);
        console.log(typeof timer);//object
        //5.console.dir 打印返回的元素对象 更好的查看里面的属性和方法
        console.dir(timer);
    </script>
</body>

2.getElementsByTagName获取某些元素

<body>
    <ul>
        <li>史蒂夫1</li>
        <li>史蒂夫2</li>
        <li>史蒂夫3</li>
        <li>史蒂夫4</li>
        <li>史蒂夫5</li>
    </ul>
    <ol id="ol">
        <li>文具店</li>
        <li>文具店</li>
        <li>文具店</li>
        <li>文具店</li>
    </ol>
    <script>
        //1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的
        var lis = document.getElementsByTagName('li');
        console.log(lis);
        console.log(lis[0]);
        //2.我们想要依次打印里面的元素对象我们可以采取遍历的方式
        for(var i = 0; i <lis.length; i++){
            console.log(lis[i]);
        }
        //3.如果页面中只有一个li 返回的还是伪数组的形式
        //4.没有li 返回空的伪数组的形式
        //5.element.getElementsByTagName('标签名');
        /* var ol = document.getElementsByTagName('ol');//[ol]
        console.log(ol[0].getElementsByTagName('li')); */
        var ol = document.getElementById('ol');
        console.log(ol.getElementsByTagName('li'));
    </script>
</body>

3.H5新增获取元素方式

<body>
    <div class="box">盒子</div>
    <div class = "box">盒子</div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        //1.getElementsByClassName 根据类名获得某些元素集合
        var boxs = document.getElementsByClassName('box');
        console.log(boxs);
        //2.querySelector 返回指定选择器的第一个元素对象 切记 里面的选择器需要加符号 .div #nav
        //类加. id加#
        var firstBox = document.querySelector('.box');
        console.log(firstBox);
        var nav = document.querySelector('#nav');
        console.log(nav);
        var li = document.querySelector('li');
        console.log(li);
        //3.querySelectorAll()返回指定选择器的所有元素对象集合
        var allBox = document.querySelectorAll('.box');
        console.log(allBox);
        var lis = document.querySelectorAll('li');
        console.log(lis);
    </script>
</body>

4.获取特殊元素

<script>
        //1.获取body元素
        var bodyEle = document.body;
        console.log(bodyEle);
        console.dir(bodyEle);
        // 2.获取html元素
        var htmlEle = document.documentElement;
        console.log(htmlEle);
    </script>

5.事件三要素

<body>
    <button id="btn">堂博士</button>
    <script>
        //点击一个按钮,弹出对话框
        //1.事件是有三部分组成 事件源 事件类型 事件处理程序 我们也称为事件三要素
        //(1) 事件源 事件被触发的对象  按钮
        var btn = document.getElementById('btn');
        //(2) 事件类型 如何触发 什么事件 比如鼠标点击 还是鼠标经过 还是鼠标按下
        //(3) 事件处理程序 通过一个函数赋值的方式 完成
        btn.onclick = function(){
            alert('学知识');
        }
    </script>
</body>

6.执行事件步骤

<body>
    <div>123</div>
    <script>
        //执行事件步骤
        //点击div 控制台输出 我被选中了
        //1.获取事件源
        var div = document.querySelector('div');
        //2.绑定事件 注册事件
        //div.onclick
        //3.添加事件处理程序
        div.onclick = function(){
            console.log('我被选中了');
        }
    </script>
</body>

7.操作元素之改变元素的内容

<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 = '2022-5-14';
            div.innerText = getDate();
        }

        function getDate(){
            //格式化日期 年月日
        var date = new Date();
        //2022年5月2日 星期一
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var dates = date.getDate();
        var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
        var day = date.getDay();
        return '今天是:' + year + '年' + month + '月' + dates + '日'+ arr[day];
    
        }
        // 我们元素可以不用添加事件
        var p = document.querySelector('p');
        p.innerText = getDate();
    </script>
</body>

8.innerText 和innerHTML的区别

<body>
    <div></div>
    <p>
        我是文字
        <span>
            123
        </span>
    </p>
    <script>
        //innerText 和 innerHTML 的区别
        //1.innerText 不识别html标签 非标准 同时空格和换行也会去掉
        var div = document.querySelector('div');
        //div.innerText = '<strong>今天是:</strong>2022';
        //2. innerHTML识别html标签 W3C标准 保留空格和换行
        div.innerHTML = '<strong>今天是:</strong>2022';
        //这两个属性是可读写的 可以获取元素里面的内容
        
        var p = document.querySelector('p');
        console.log(p.innerText);
        console.log(p.innerHTML);
    </script>
</body>

9.操作元素之修改元素属性

<body>
    <button id = 'girl'>女孩</button>
    <button id = 'sun'>太阳</button>
    <img src="images/1.jpg" alt="">
    <script>
        //修改元素属性 src
        //1.获取元素
        var girl = document.getElementById('girl');
        var sun = document.getElementById('sun');
        var img = document.querySelector('img');
        //2.注册事件 处理程序
        sun.onclick = function(){
         img.src = 'images/2.jpg';   
         img.title = '太阳';
        }
        girl.onclick = function(){
            img.src = 'images/1.jpg';
            img.title = '女孩'
        }

    </script>
</body>

10.分时间显示图片并分时问候的案例

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

11.操作元素之表单属性设置

<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 = '被点击了';
            /* input.type = "xxx";
            input.checked = "xxx";
            input.selected = true / false;
            input.disabled = true / false; */
            //如果想要某个表单被禁用 不能再点击disabled 我们想要这个按钮 button禁用
            //btn.disabled = true;
            this.disabled = true;
            //this指向事件函数的调用者 btn
        }
    </script>
</body>

12.仿京东显示、隐藏密码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            position: relative;
            width: 400px;
            border-bottom: 1px solid #ccc;
            margin: 100px auto;
        }

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

        .box img {
            position: absolute;
            width: 24px;
            top: 10px;
            right: 20px;
        }
    </style>
</head>

<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.onclick = function () {
            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>

</html>

13.操作元素之修改样式属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        //1.获取元素
        var div = document.querySelector('div');
        //2.注册事件 处理程序
        div.onclick = function(){
            //div.style里面的属性 采取驼峰命名法
            //js修改style样式操作,产生的是行内样式,css权重比较高
            this.style.backgroundColor = 'purple';
            this.style.width = '250px';
        }
    </script>
</body>
</html>

14.关闭淘宝二维码案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            position: relative;
            width: 74px;
            height: 88px;
            border: 1px solid #ccc;
            margin: 100px auto;
            font-size: 14px;
            text-align: center;
            color:brown;
            display: block;
        }
        .box img{
            width: 100px;
            height: 70px;
            margin-top: 5px;
        }
        .close-btn{
            position: absolute;
            top: -1px;
            left: -16px;
            width:14px;
            height: 14px;
            border: 1px solid #ccc;
            line-height: Arial,Helvetica, sans-serif;
            cursor:pointer;
        }
    </style>
</head>
<body>
    <div class="box">
        淘宝二维码
        <img src="images/1.jpg" alt="">
        <i class="close-btn">x</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>
</html>

15.循环精灵图

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style-type: none;
        }

        /* 取消li标签前面的圆点 */

        .box {
            width: 250px;
            margin: 100px auto;
        }

        .box li {
            float: left;
            width: 24px;
            height: 24px;
            background-color: pink;
            margin: 15px;
            background: url(images/sprite.png) no-repeat;
        }
    </style>
</head>

<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++) {
            //让索引号 乘以 44 就是每个li的背景y坐标 index 就是y坐标
            var index = i * 44
            lis[i].style.backgroundPosition = '0 -'+index+'px';
        }
    </script>
</body>

</html>

16.显示隐藏文本框内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        input{
            color:  #999;
        }
    </style>
</head>
<body>
    <input type="text" value="手机">
    <script>
        //1.获取元素
        var text = document.querySelector('input');
        //2.注册事件 获得焦点事件 onfocus
        text.onfocus = function(){
            //console.log('得到了焦点');
            //this.value:可以得到this的值  this:不可以得到值
            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>
</html>

17.通过className更改元素样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    div {
        width: 100px;
        height: 100px;
        background-color: pink;
    }
    
    .change {
        background-color: purple;
        color: #fff;
        font-size: 25px;
        margin-top: 100px;
    }
    </style>
</head>
<body>
    <div>文本</div>
    <script>
        //1.使用element.style(行类样式操作)获得修改元素样式 如果样式较少 或者 功能简单的情况下使用
        //  使用element.className(类名样式操作) 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况
        var test = document.querySelector('div');
        //2.注册事件 处理程序
        test.onclick = function(){
            /* this.style.backgroundColor = 'purple';
            this.style.width = '250px';//color fontSize marginTop... */
            //让我们当前元素的类名改为了change

            //3.className 会直接更改元素的类名,会覆盖原先的类名
            //如果想要保留原先的类名,,我们可以:多类选择器
            this.className = 'change';
        }
    </script>
</body>
</html>

18. 仿新浪注册页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 600px;
            margin: 100px auto;
        }
        
        .message {
            display: inline-block;
            font-size: 12px;
            color: #999;
            background: url(images/mess.png) no-repeat left center;
            padding-left: 20px;
        }
        
        .wrong {
            color: red;
            background-image: url(images/wrong.png);
        }
        
        .right {
            color: green;
            background-image: url(images/right.png);
        }
    </style>
</head>
<body>
    <div class="register">
        <input type="password" class="ipt">
        <p class="message">请输入6~16位密码</p>
    </div>
    <script>
        // 首先判断的事件是表单失去焦点 onblur
        // 如果输入正确则提示正确的信息颜色为绿色小图标变化
        // 如果输入不是6到16位,则提示错误信息颜色为红色 小图标变化
        // 因为里面变化样式较多,我们采取className修改样式
        // 1.获取元素
        var ipt = document.querySelector('.ipt');
        var message = document.querySelector('.message');
        // 2.注册事件 失去焦点
        ipt.onblur = function(){
            //根据表单里面值的长度 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>
</html>

19.开关灯案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="btn">开关灯</button>
    <script>
        var btn = document.getElementById('btn');
        var flag = 0;
        btn.onclick = function(){
            if(flag == 0){
                document.body.style.backgroundColor = 'black';
                flag = 1;
            }else{
                document.body.style.backgroundColor = '#fff';
                flag = 0;
            }
        }
    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/crush_oo/article/details/124864211