Fork me on GitHub

JsDOM操作

DOM(文档对象模型)

  在JS中,所有的事物都是节点,元素、文本等都是节点。把浏览器中的标签看成树状结构,每个标签看成一个节点(dom元素)。

      应用场景:可以通过节点进行DOM对象的增删改查

获取DOM节点的方法

//通过id获取,唯一的
var oDiv = document.getElementById('box');
//通过类名获取
var oDiv = document.getElementsByClassName('.box')[0];
//通过标签名获取
var oDiv = document.getElementsByTagName('div')[0];

常用的DOM节点

节点的增删改查

 

<div>
    <h3>路飞学城</h3>
</div>
<div id="box">
    <p>alex</p>

    <p>wusir</p>
    <p>xiaomage</p>
    <p>egon</p> 
    <a>luffy</a>             
</div>
<div>
    <h3>路飞学城2</h3>
</div>

// 1.创建元素节点 var oH2 = document.createElement('h2'); // 设置oH2的内容,p标签会被解析成p元素显示到HTML页面中 oH2.innerHTML = '<p>嘿 sariy</p>'; // 只设置元素内的文本内容,div标签将被当做文本元素 oH2.innerText = '<div>嘿嘿</div>' // 2.将创建好的元素节点添加到指定元素所有内容的后面 oDiv.appendChild(oH2); // 获取元素节点里的所有内容 包括标签和文本 console.log(oDiv.innerHTML); // 表示元素节点的标签名大写 console.log(oDiv.tagName); // 只获取元素内的文本内容,html标签将被忽略 console.log(oDiv.innerText); // 设置元素id oH2.id = 'luffy'; // 设置类名 oH2.className = 'wusir'; oH2.className = 'wusir2'; //获取标签属性 console.log(oH2.getAttribute('class'));//wusir2 // 设置标签属性 oA.setAttribute('href','https://www.luffycity.com'); // 删除元素上的属性 oA.removeAttribute('href'); // 删除创建的对象 // oDiv.removeChild(oH2); //如果为true 克隆当前元素与元素的所有子节点 // console.log(oDiv.cloneNode(true)); // 父节点.replaceChild(新节点,子节点) 用新节点替换某个子节点 var op = document.createElement('p'); op.innerText = '我是一个段落'; oDiv.replaceChild(op,oA); //style属性 :css内联样式属性值 //一般情况下, css的样式属性中出现“-” 号,则对应的style属性 是:去掉“-”号,把“-”号 后面单词的第一字母大写。 如果没有“-”号,则两者 一样。 //例如:oDiv.css.backgroundColor = 'red';

 

模态框案例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            html,body{height: 100%;}  
            #box{width: 100%;height: 100%;background: rgba(0,0,0,.3);}
            #content{
                position: relative;
                top: 150px;
                width: 400px;
                height: 200px;
                line-height: 200px;
                text-align: center;
                color: red;
                background-color: #fff;
                margin: auto;
            }
            #span1{
                position: absolute;   
                background-color: red;
                top: 0;
                right: 0;
                width: 30px;
                height: 30px;
                line-height: 30px;
                text-align: center;
                color: #fff;

            }
        </style>
    </head>
    <body>
        <button id="btn">弹出</button> 
    </body>
    <script type="text/javascript">
        //dom  document object model
        
        //树状结构
        /*
         html
        head  body  节点
             span div button img ....
         * 
         * 
         * */
        console.log(document)
        //获取dom元素
        var btn = document.getElementById('btn')
        
        //创建divdom元素
        var oDiv = document.createElement('div')
        var oP = document.createElement('p')
        var oSpan = document.createElement('span')
        
        
        oDiv.id = 'box';
        oP.id = 'content'
        oP.innerHTML = '模态框成功弹出'
        oSpan.innerHTML = 'X';
        oSpan.id = 'span1'
        
        
        oDiv.appendChild(oP)  //把oP插入到div中
        oP.appendChild(oSpan)
    
        console.log(btn)
        btn.onclick = function(){
           //alert(111)
            //动态的添加到body中一个div  ;btn的父节点就是body  btn.parentNode; 把oDiv插到btn的前面
            console.log(this)
            this.parentNode.insertBefore(oDiv,btn)
            
        }
        oSpan.onclick = function(){   //点击X把div标签又移除了。
           // removeChild

            oDiv.parentNode.removeChild(oDiv) //
        }
        
    </script>
</html>

 

点击有惊喜案例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            .box{
                width: 200px;
                height: 200px;
                background: red;
                text-align: center; /*文字*/
                color: white;
                line-height: 200px;
                font-size: 23px;
                font-weight: bold; /*变粗*/
                margin: 20px auto;
                }
        </style>
    </head>
    <body>
        <div class="box">
            点击有惊喜!!
        </div>
        <!--<div class="box"></div>-->
    </body>
    <script type="text/javascript">
        
        var oBox = document.getElementsByClassName('box')[0];
        console.log(oBox.innerText);//只获取元素内的文本内容即获取点击有惊喜,html标签将被忽略
        
        var a = 0;
        
        oBox.onclick  = function(){
            a++;
            if(a%4===1){      //1除以4等于0,余数为1
                this.style.background = 'green';  //使用行内样式引入css样式,见下截图
                this.innerText = '继续点击哦!';  //设置oBox的内容
            }else if(a%4==2){                    //2%4的余数为2,即2除以4
                this.style.background = 'blue';
                this.innerText = '哈哈!骗你的';
            }else if(a%4==3){
                this.style.background = 'transparent';
                this.innerText = '';
            }else{
                this.style.background = 'red';
                this.innerText = '点击有惊喜!!';
            }    
            
        }
        
    </script>
</html>

节点创建、获取(追加)、设置相关属性、点击事件、移除

 

简易留言板

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>留言板</title>
    </head>
    <body>
        <h1>简易留言板</h1>
        <div id="box">
            <!--<ul>
                
            </ul>-->
            
        </div>
        <textarea id="msg"></textarea>
        <input type="button" id="btn" value="留言"/>
        <button onclick="sum()">统计</button>
    </body>
    <script type="text/javascript">
        var ul = document.createElement('ul');
        var box = document.getElementById('box');
        box.appendChild(ul);
        //获取按钮元素
        var btn = document.getElementById('btn');
        var msg = document.getElementById('msg')
        
        var count = 0;
        
        btn.onclick = function(){
            console.log(msg.value);
//创建li标签,并设置内容
var li = document.createElement('li'); li.innerHTML = msg.value + "<span>&nbsp;&nbsp;X</span>" //文本元素+span标签; var lis = document.getElementsByTagName('li'); if(lis.length == 0){ ul.appendChild(li); count++; }else{ ul.insertBefore(li,lis[0]); count++; }

msg.value
= ''; //清空,把框内的内容清空 var spans = document.getElementsByTagName('span'); //移除 for(var i = 0; i< spans.length; i++){ spans[i].onclick = function(){ ul.removeChild(this.parentNode) //this 指的是spans[i] count--; } } }
function sum(){ alert(
'一共发布了'+count+'条留言'); } </script> </html>

 

 

 

选项卡(table栏的切换)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            ul{list-style: none;}
            #tab{
                width: 480px;
                margin: 20px auto;
                border: 1px solid red;
            }
            ul li{
                float: left;
                width: 160px;
                height: 60px;
                line-height: 60px;
                text-align: center;
                background-color: #cccccc;   /*设置下切换的时候页面背景变白*/
            }
            
            ul li a{
                text-decoration: none;
                color:black;
            }
            li.active{
                background-color: #FFFFFF;
            }
            p{
                display: none;  //设置隐藏了
                height: 200px;
                text-align: center;
                line-height: 200px;
                background-color: pink;
            }
            p.active{
                display: block;   /*块级元素和行内元素的转换; 只显现出class=“active”的,其他的都隐藏掉  */
                
            }
            
        </style>
    </head>
    <body>
        <div id="tab">
            <ul>
                <li class="active"><a href="#">首页</a></li>
                <li><a href="#">新闻</a></li>
                <li><a href="#">图片</a></li>
                
            </ul>
            <p class="active">首页内容</p>
            <p>新闻内容</p>
            <p>图片内容</p>
            
            
        </div>
    </body>
    <script type="text/javascript">
        
        var tabli = document.getElementsByTagName('li');
        var tabContent = document.getElementsByTagName('p')
    
        for(var i = 0; i < tabli.length; i++){   
            //为了保存我的i的变量;  for循环遍历它会取到最后一个i;保存点击每个选项的i;双重for循环
            tabli[i].index  = i;
            tabli[i].onclick = function(){ 
                
                for(var j = 0; j < tabli.length; j++){
                    tabli[j].className = '';
                    tabContent[j].className = '';
                }    
                this.className = 'active'
                console.log(this.index)     // 0 1 2 
                tabContent[this.index].className = 'active';
            }
        }
        
    </script>
</html>

 

仿淘宝搜索框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            
            #search{
                position: relative;
            }
            
            input{
                outline: none;   /*外边的那个边框轮廓*/
                display: block;
                width: 490px;
                height: 50px;
                margin-top: 20px;
                font-size: 20px;
                border: 2px solid orange;
                border-radius: 10px;
                
                                
            }
            label{
                position: absolute;
                top: 20px;
                left: 10px;
                font-size:8px;
                color: gray;

            }
        </style>
    </head>
    <body>
        <div id="search">
            <input type="text" id="text" />        
            <label for="txt" id="msg">路飞学城</label>
        </div>
    </body>
    
    <script type="text/javascript">
        var txt = document.getElementById('text');
        var msg = document.getElementById('msg');
        
        //检测用户表单输入的时候会调用这个方法
        txt.oninput = function(){
            
            if (this.value == '') {
                msg.style.display = 'block'
            }else{
                msg.style.display = 'none'
            }
        }
        
    </script>
</html>

 

获取当前最新时间

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
    
    <script type="text/javascript">
        
        setInterval(function(){    //开启一个定时器时时监听它
                
            var date = new Date();
            
            var y = date.getFullYear();
            var m = date.getMonth();  //获取一个月的时候要加上一个1,如4月,4+1
            var d = date.getDate();
            var h = date.getHours();
            var min = date.getMinutes();
            var s =  date.getSeconds();
            
            //今天是2018年2月23日 8:23:09
            
            //document.body.innerHTML = '123'    把这个时间换成123就可以了
       //document.body.innerHTML = "今天是"+y+"年"+(m+1)+"月"+d+"日"+h+"时"+min+"分"+s+"秒"
document.body.innerHTML = "今天是"+y+'' + num(m+1)+""+ num(d) + "" + num(h)+":"+num(min)+":"+num(s) },1000) function num(n){ if (n<10) { return "0"+ n; //对分钟做一个操作,01/02/03/04、、、;上边加一个这样的num函数就可以了 } return n } // </script> </html>

匀速运动案例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            .box{
                width: 200px;
                height: 200px;
                background-color: #FF0000;  /*红色*/
                position: absolute;
                top: 50px;
                left: 0px;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            
            <button id="btn">运动</button>
            <div class="box" id="box1">
                
            </div>
            
        </div>
    </body>
    <script type="text/javascript">
        var btn = document.getElementById('btn');
        
        var box1 = document.getElementById('box1')
        
        var count  = 0;
        var time = null;
        btn.onclick = function(){   //onclick事件
            
            time = setInterval(function(){  //开启一个定时器
                count+=10;  //每1s让这个count++;让它变得快一点就是count+=2/4/10
                if(count>1000){       //left小于1000px
                    clearInterval(time) //到达一定时就给它清除掉
                    box1.style.display = 'none'   
                }
                
                box1.style.left = count + 'px'    //一定要加px            
                
            },10) //0.01s
            
        }
    </script>
    
</html>

 

3-5s之后关闭广告

在img上边加一个span标签,给它个x,取到span便签,点击事件,然后把当前的img删除掉就可以了;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            img{
                position: fixed;
            }
            ul{list-style: none;} 
            #left{left: 0;}
            #right{right: 0;}
            ul li{
                font-size: 25px;
            }
        </style>
    </head>
    <body>
        <img src="images/1.gif"/ id="left">
        <img src="images/1.gif"/ id="right">
        <ul>
            <li>屠龙宝刀,点击就送</li>
        </ul>
        
    </body>
    
    <script type="text/javascript">
        window.onload  = function(){   //窗口在加载的时候让它去执行一个函数
            var left = document.getElementById('left');
            var right = document.getElementById('right');
            
            setTimeout(function(){  
                left.style.display = 'none';  //5s之后把它给关掉
                right.style.display = 'none';
            },5000)
        }
    </script>
</html>

小米滚动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            .wrap{
                width: 512px;
                height: 400px;
                border: 3px solid #808080;
                position: relative;
                overflow: hidden; #内容会被修剪,且其余部分是不可见的
                margin: 100px auto;
            }
            .wrap span{
                width: 100%;
                height: 200px;
                position: absolute;        
            }
            .up{
                top: 0;
            }
            .down{
                bottom: 0;
            }
            img{
                position: absolute;
                top: 0;
                left: 0;        
            }
        </style>
    </head>
    <body>
        <div id="box" class="wrap">
            <img src="images/mi.png"/ id="xiaomi">
            
            <span class="up" id="picUp"></span>
            
            <span class="down" id="picDown"></span>
            
            
        </div>
    </body>
    <script type="text/javascript">
        var up = document.getElementById('picUp');
        var down = document.getElementById('picDown');
        
        var img = document.getElementById('xiaomi')
        
        var count = 0;
        var time = null;
        //鼠标移入的时候吧
        up.onmouseover = function(){
            
            //不管你是移动到上边还是移动到下边, 上来先清定时器
            clearInterval(time);
            time = setInterval(function(){
                count-=3;
                
                count >= -1070 ? img.style.top = count + 'px': clearInterval(time);  //top默认0
               
            },30)
        }
        down.onmouseover = function(){
            clearInterval(time)
            
            time = setInterval(function(){
                count+=1;
                
                count < 0 ? img.style.top = count + 'px': clearInterval(time);  
            },30)
        }

    </script>
</html>

 

无缝轮插图

就是每张图片之间没有停顿的效果,一直在那滚动;有缝就是这张图片播放去之后再播放下一张;交点图就是下面有索引的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{padding: 0;margin: 0;}
            ul{list-style: none;}
            .box{
                width: 600px;
                height: 200px;
                margin: 50px auto;
                overflow: hidden;  /*超出部分设置这个*/
                position: relative; /*父盒子相对定位*/

            }
            ul li{
                float: left;
            }
            .box ul{
                width: 400%;
                position: absolute; /*子盒子绝对定位*/
                top: 0;
                left: 0;
                
            }
            
        </style>
    </head>
    <body>
        <div class="box">
            <ul>
                <li><img src="images/01.jpg"/></li>
                <li><img src="images/02.jpg"/></li>
                <li><img src="images/03.jpg"/></li>
                <li><img src="images/04.jpg"/></li>
                
            </ul>
            <!--<div></div>
            <p></p>-->
            
        </div>
    </body>
    <script type="text/javascript">
        var box = document.getElementsByClassName('box')[0];
        var ul = box.children[0];  //取到这个ul
        var num = 0;
        var timer = null;
        
        timer = setInterval(autoPlay,30)
        //函数的声明
        function autoPlay(){
            num--; //匀速
            
            num <=-600 ? num=0 : num ;
            ul.style.left = num + 'px'
            
        }
        //鼠标移动上去
        box.onmouseover = function(){
            clearInterval(timer)
        }
        box.onmouseout = function(){   //鼠标离开的时候
            timer  = setInterval(autoPlay,30);
        }

    </script>
</html>

 

 

posted @ 2018-05-15 23:49  kris12  阅读(532)  评论(0编辑  收藏  举报
levels of contents