zoukankan      html  css  js  c++  java
  • DOM操作元素

           DOM 操作元素       

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

    DOM操作元素:

    一、操作元素:(一)innerText 、(二)innerHTML

    二、操作常见元素属性:src、href、title、alt等;

    三、操作表单元素属性:type、value、disabled等;

    四、操作元素样式属性:(一)element.style、(二)className

    五、排他思想

      一、改变元素内容  

    element.innerText  改变元素的内容

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

    注意:如果想读取元素节点的属性,直接使用(元素 . 属性名

    例如元素.id / 元素.name

    但是注意,class不可以采取这种方式,读取class属性的时候需要使用 元素.className

    <body>
    <button>显示当前系统元素</button>
    <div>时间</div>
    <script>
    //1、获取元素
    var btn = document.querySelector('button');
    var div = document.querySelector('div');
    //2、注册事件
    btn.onclick = function(){
        div.innerText='2019年10月26日';
    } 
    </script>


     补给元素添加事件,直接改变元素的内容

    <p></p>
    <script>
    var p = document.querySelector('p');
    p.innerText = '2019年10月26日';
    </script>

    element.innerHTML  改变元素的内容,起始位置到终止位置的全部内容,包括HTML标签,同时保留空格和换行。

     

    innerText 和 innerHTML 的区别

    1、innerText 不识别HTML标签,里面的html标签会直接显示出来【非标准】

    var p = document.querySelector('p');
    p.innerText = '<b>今天是:</b>2019年10月26日';

    2、innerHTML 识别HTML标签。【W3C标准】innerHTML用于获取元素内部的HTML代码,对于自结束标签没有意义

    var p = document.querySelector('p');
    p.innerHTML = '<b>今天是:</b>2019年10月26日';

     这两个属性是可读写的,可以获得元素里面的内容

    <p>寂寞空庭    春欲晚
    梨花满地    不开门</p>
    <script>
    var p = document.querySelector('p');
    console.log(p.innerText);
    console.log(p.innerHTML);
    </script>

     

    • innerText 不识别HTML标签,不保留代码中的空格和换行,输出的效果和代码在页面显示出的效果是一样的;
    • innHTML  识别HTML 标签,保留代码中的空格和换行,按照代码格式原样输出,效果类似于<pre>标签,获取元素内部的HTML代码,自结束标签不适用;(推荐使用)

      二、常用元素的属性操作(图片) 

    1、innerText、innerHTML 改变元素的内容

    2、src、href

    3、id、alt、title

    操作元素以改变这些元素的属性值

    元素里面的属性可以进行修改,在处理事件中对元素属性进行修改。

    实例1:


     点击按钮切换图片,鼠标悬停时显示不同的提示文字。

    <body>
    <button id="dog">狗子</button>
    <button id="cat">猫咪</button><br>
    <img src="1.jpg" width="150px" height="150px" title="狗子"/>
    <script>
    //修改元素属性
    //获取元素
    var dog = document.getElementById("dog");
    var cat = document.getElementById("cat");
    var img = document.querySelector('img');
    //注册事件 处理函数
    cat.onclick = function(){
        img.title='猫咪';
        img.src = '2.jpg';
    };
    dog.onclick = function(){
        img.title='狗子';
        img.src = '1.jpg';    
    }
    </script>
    </body>

    实例2:


     分时间显示不同的图片,显示不同的文字

    如果上午时间打开页面,显示上午好,显示上午图片

    如果下午时间打开页面,显示下午好,显示下午图片

    如果晚上时间打开页面,显示晚上好,显示晚上图片

    案例分析:

    1、根据系统不同时间来判断,所以需要用到日期内置对象

    2、分为上午、下午、晚上所以利用多分支语句来设置不同的图片

    3、需要一个图片,根据时间修改图片,就需要用到操作元素src属性。

    4、需要一个div元素,显示不同的问候语,修改元素内容即可

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7     img{
     8     width:150px;
     9     height:150px; }
    10     </style>
    11 </head>
    12 <body>
    13 <img src="3.jpg"/>
    14 <div>猪突猛进</div>
    15 <script>
    16 //1、获取元素
    17     var img = document.querySelector('img');
    18     var div = document.querySelector('div');
    19 ///2、得到当时的小时数
    20     var date = new Date();
    21     var h = date.getHours();
    22 //3、判断小时数改变图片和文字信息
    23     if(h<12){
    24     img.src="4.jpg";
    25     div.innerHTML="炭治郎say:上午";
    26 }else if(h<18){
    27     img.src="5.jpg";
    28     div.innerHTML="富冈义勇say:下午";
    29 }else{
    30     img.src="6.jpg";
    31     div.innerHTML="我妻善逸say:晚上";
    32 }
    33 </script>
    34 </body>
    35 </html>

     现在2019年10月27日10:29:06,所以输出效果:

      三、表单元素的属性操作  

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

    type、value、checked、selected、disabled

    实例:


     点击按钮之后,将输入框的文字变为 ‘点击了’ ,并且点击过一次之后按钮变成灰色,不可用。

    注意:

    1、innerHTML修改内容,修改的是普通盒子里面的内容,比如是div标签里面的内容。

    2、表单里面显示的内容是通过value值实现的,如果想修改也得改变value值

    3、如果想让按钮被禁用可以使用disabled属性,设置disable为true。即可实现button被禁用

    4、this指向的是事件函数的调用者,onclick=function() 这个函数是被btn调用了,所以在这里面this指的是btn。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8 <button>按钮</button>
     9 <input type="text" value="输入内容">
    10 <script>
    11 //获取元素
    12 var btn = document.querySelector('button');
    13 var input = document.querySelector('input');
    14 //注册事件 处理程序
    15 btn.onclick = function(){
    16     //input.innerHTML = '点击了~';
    17     //innerHTML这个是普通盒子比如div标签里面的内容
    18     //表单里面的值是通过value属性来实现的
    19     input.value = '点击了~';
    20     //如果想让某个按钮被禁用,不可以再点击,使用disabled,让button被禁用
    21     //btn.disabled = true;
    22     this.disabled = true;
    23     //this指向的是事件函数的调用者,onclick=function这个函数是被btn调用了,所以在这里this指向的就是btn    
    24 }
    25 </script>
    26 </body>
    27 </html>

     实例2:


     仿照京东显示密码——点击按钮将密码框切换为文本框,并可以查看密码明文

    核心思路:

    1、点击按钮,把密码框类型改为文本框可以看见里面的密码

    2、一个按钮有两次状态,点击一次切换为文本框,再点一次,切换为密码框

    3、算法:利用一个flag变量,来判断flag的值,如果是1就切换为文本框,flag设置为0;

    如果是0就切换为密码框,flag设置为1;

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>仿京东登录框</title>
     6     <style>
     7     .box{
     8         width:300px;
     9         border-bottom:1px solid #f00;
    10         margin:100px auto;
    11         position:relative; }
    12     .box input{
    13         width:270px;
    14         height:30px;
    15         border: 0;
    16         outline:none; }
    17     .box img{
    18         position:absolute;
    19         top:10px;
    20         right:10px;}
    21     </style>
    22 </head>
    23 <body>
    24     <div class="box">
    25         <label for="">
    26             <img src="view_off.png" id="img1" />
    27         </label>
    28         <input type="password"  id="input1"></input>
    29     </div>
    30     <script>
    31     //获取元素
    32         var img1 = document.getElementById('img1');
    33         var input1 = document.getElementById('input1');
    34     //注册事件
    35     //遇到一个按钮可以点多次,就使用flag变量去实现
    36         var flag = 0;
    37         img1.onclick = function(){
    38         //点击一次之后,flag一定要变化
    39         if(flag == 0){
    40             img1.src="view.png";
    41             input1.type='text';
    42             flag = 1;
    43         }else{
    44             img1.src = "view_off.png"
    45             input1.type = 'password';
    46             flag = 0;
    47             } }
    48     </script>
    49 </body>
    50 </html>

    点击之前

     点击之后

     4、除了可以添加变量flag,设置算法来判断当前输入框类型是否是密码类型,还可以直接使用 if…else 分支结构判断当前输入框 type 状态是否是密码框。

    1 img1.onclick = function(){
    2         if(input1.type == 'password'){
    3             img1.src = 'view.png';
    4             input1.type = 'text';
    5         }else{
    6             img1.src="view_off.png";
    7             input1.type='password';
    8         }
    9     }

       四、样式属性操作   

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

    (一)element.style   行内样式操作

    (二)element.className  类名样式操作

    注意:

    1、JS里面的样式采取驼峰命名法,比如 fontSize 、backgroundColor等

    2、JS修改 style 样式操作,相当于产生的是行内样式,比内嵌样式的权重要高。

    (一)element.style   行内样式操作

    使用element.style  获得修改元素的样式,如果样式比较少 或者功能简单的情况下适用

    实例:


     当点击了元素之后,元素背景颜色由天蓝色变为粉红色,并且宽度增加为250px;

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    <style>
        div{width:200px;height:200px;background:skyblue;}
    </style>
    </head>
    <body>
        <div></div>
    <script>
    //获取元素
    var div = document.querySelector('div');
    //注册事件 处理程序
    div.onclick = function(){
    //div.style里面的属性采用驼峰命名法
        this.style.backgroundColor = 'pink';
        this.style.width='300px';    
    }
    </script>
    </body>
    </html>

    点击前

     点击后

     案例2:


     点击关闭按钮,关闭当前登录二维码

    核心思路:

    1、利用样式的显示和隐藏元素,display:none隐藏元素;display:block显示元素

    2、点击按钮,让二维码盒子隐藏起来

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 <style>
     7     .box{
     8     position:relative;
     9     width:130px;height:150px;
    10     border:1px solid red;
    11     margin:100px auto;
    12     font-size:18px;
    13     text-align:center;
    14     color:red;
    15     }
    16     .box .img{
    17     margin-top:5px;    
    18     }
    19     .close{
    20     position:absolute;
    21     top:-1px;
    22     left:-18px;
    23     border:1px solid red;
    24     cursor:pointer;
    25 }
    26 </style>
    27 </head>
    28 <body>
    29 <div class="box">
    30 登录二维码
    31     <img src="tao.png" class="img">
    32     <img src="close.png" class="close">
    33 </div>
    34 <script>
    35 //获取元素
    36 var box = document.querySelector('.box');
    37 var close = document.querySelector('.close');
    38 //注册事件 处理程序
    39 close.onclick = function(){
    40     box.style.display = 'none';
    41 }
    42 </script>
    43 </body>
    44 </html>

     显示效果(点击关闭按钮之后,触发onclick事件,运行display:none;登录二维码消失):

     

     (二)element.className  类名样式操作

    注意:

    1、如果样式比较多,可以采用操作类名方式更改元素样式

    2、class因为是保留字,因此使用 className 来操作元素的 class 类名属性

    3、className 会直接更改元素的类名,会覆盖原先的类名。

    4、如果想要保留原来的类名又想添加新的类名,可以这样写 this.className = 'first change';

    这里,如果添加了多个类,具体应用那个类添加的样式,遵循CSS样式优先级规则,写在下面的样式优先级更高

    通过触发事件给元素添加类名,来实现为元素更改更多的样式;适合于样式较多,功能更加复杂的情况。

    实例一:


     单击div,为元素添加class类名,添加名为change的类,使用类change的样式。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 <style>
     7     .change{
     8         background-color:#aaf;
     9         color:pink;
    10        font-size:25px;
    11        margin-top:100px;}
    12 </style>
    13 </head>
    14 <body>
    15     <div class="first">hello world</div>
    16 <script>
    17     var aa = document.querySelector('div');
    18     aa.onclick=function(){
    19     this.className = 'change';}
    20 </script>
    21 </body>
    22 </html>

     点击之后:(为更改元素的类名,并且更改过后的样式会覆盖原有样式,所以点击完之后 类名由 first 变成了 change)

     实例二:


    密码框格式提示错误信息

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

    实现分析:

    1、首先判断使用的事件是失去焦点 onblur

    2、如果输入正确则提示正确的信息,小图标颜色为绿色

    3、如果输入不是6~16位,则提示错误信息颜色为红色,小图标变化

    4、因为里面需要改变的样式比较多所以采用 className 修改样式

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>密码框格式提示错误信息</title>
     6     <style>
     7     .box{
     8         width:600px;
     9         margin:100px auto;
    10     }
    11     .massage{
    12         display:inline-block;
    13         font-size: 14px;
    14         color: #999;
    15         background: url(info_filled.png) no-repeat left center;
    16         padding-left: 20px;
    17     }
    18     .wrong{
    19         color:red;
    20         background:url(close_filled.png) no-repeat left center;
    21     }
    22     .right{
    23         color:green;
    24         background:url(check.png) no-repeat left center;
    25     }
    26     </style>
    27 </head>
    28 <body>
    29 <div class="box">
    30     <input type="password" class="inp">
    31     <p class="massage"> 请输入6~16位密码</p>
    32 </div>
    33     <script>
    34     //获取元素    
    35     var inp = document.querySelector('.inp');
    36     var aa = document.querySelector('.massage');
    37     //注册事件
    38     inp.onblur = function(){
    39         //根据表单里面值的长度,进行判断
    40         if(this.value.length < 6 || this.value.length > 16){
    41             aa.className = ' massage wrong' ;
    42             aa.innerHTML = '    输入的密码为位数错误';
    43         }else{
    44             aa.className = 'massage right';
    45             aa.innerHTML = '    输入格式正确'
    46         }
    47     }
    48     </script>
    49 </body>
    50 </html>

     

       五、排他思想   

    可以每一个元素都单独添加单击事件,但是需要写大量的重复的代码,未免太过麻烦

    如果有同一组元素,如果想要某一个元素实现某种样式,需要用到循环的排他思想

    1、先给所有元素清除样式;

    2、给当前元素设置样式;

    3、注意顺序不能颠倒,首先干掉其他元素,再设置当前元素;

    实例:


     给五个按钮都可以实现点击按钮之后,按钮背景变成 蓝色

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>多个按钮的单击事件</title>
    </head>
    <body>
        <button>按钮1</button>
        <button>按钮2</button>
        <button>按钮3</button>
        <button>按钮4</button>
        <button>按钮5</button>
    </body>
    <script>
        //获取所有按钮元素
        var btns = document.getElementsByTagName('button');
        //btns 得到的是伪数组,里面的单独元素是 btn[i]
        for(var i=0 ; i < btns.length; i++){
            btns[ i ].onclick = function(){
            //第一步,先将所有的按钮背景颜色都去掉
                for(var i = 0; i < btns.length; i++){
                    btns[i].style.backgroundColor = '';
                }
            //第二步,然后才让当前元素的背景颜色改变
            thisstyle.backgroundColor = '#aaf';
        }
    }
    </script>
    </html>

  • 相关阅读:
    python中的GIL
    centos7 安装docker
    ORACLE INSERT INTO SELECT
    Java substring几个用例
    Java Date类型转换、操作等(util.Date sql.Date,)
    ORACLE 按字段去除重复数据
    OFFICE技巧汇编
    ORACLE自动类型转换的坑
    ubuntu下,pycharm svn 版本控制,svn服务器在win下
    【草稿】pip重要命令;python 变量命名规则
  • 原文地址:https://www.cnblogs.com/nyw1983/p/11747072.html
Copyright © 2011-2022 走看看