zoukankan      html  css  js  c++  java
  • Python全栈开发之15、DOM

      文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。这里我们主要是讲用javascript操作DOM

    一、查找元素

      如果我们想用js操作文档,首先要做的便是要找到要操作的元素,查找元素有直接查找和间接查找,下面来看一下这两类查找,

    // 直接查找
    
    document.getElementById             根据ID获取一个标签   获取的是单个标签
    document.getElementsByName          根据name属性获取标签集合 注意获取的是一个 ******数组********
    document.getElementsByClassName     根据class属性获取标签集合
    document.getElementsByTagName       根据标签名获取标签集合
    
    // 间接查找
    
    parentNode          // 父节点
    childNodes          // 所有子节点
    firstChild          // 第一个子节点
    lastChild           // 最后一个子节点
    nextSibling         // 下一个兄弟节点
    previousSibling     // 上一个兄弟节点
     
    parentElement           // 父节点标签元素
    children                // 所有子标签
    firstElementChild       // 第一个子标签元素
    lastElementChild        // 最后一个子标签元素
    nextElementtSibling     // 下一个兄弟标签元素
    previousElementSibling  // 上一个兄弟标签元素
    

    二、操作 

    1、内容 

      操作内容主要是 innerText,innerHTML和value其中前两种比较简单,主要是第三种在操作表单的时候,用得最多,text,password和textarea的value可以分为一类,checkbox,radio和select的value可以分为一类,下面来看下表单中操作value的例子

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input id="i1"  type="text" value="123"/>
        <input  id="i2" type="password" value="111" />
        <textarea id="i3">666</textarea>
        <h1>爱好</h1>
        <div id="i4">
            <ul>
                <li> <input type="checkbox" value="1" /> 篮球 </li>
                <li> <input type="checkbox" value="2"/> 足球 </li>
                <li> <input type="checkbox" value="3"/> 去球 </li>
            </ul>
        </div>
        <div id="i5">
            <ul>
                <li> <input type="radio" name="interesting" value="11" /> 篮球 </li>
                <li> <input type="radio" name="interesting" value="22"/> 足球 </li>
                <li> <input type="radio" name="interesting" value="33"/> 去球 </li>
            </ul>
        </div>
        <select id="i6">
            <option value="11">上海</option>
            <option value="22">北京</option>
        </select>
        <script>
            // 下面三项的value值为用户输入的值,也可以通过value给其设置值
            var vtext = document.getElementById('i1');
            console.log(vtext.value);
    
            var vpasswd = document.getElementById('i2');
            console.log(vpasswd.value);
    
            var vtextarea = document.getElementById('i3');
            console.log(vtextarea.value);
            
            // 下面三项的 value 为选中后提交到后台value
            var vcheck = document.getElementById('i4');
            var vli = vcheck.getElementsByTagName('input');
            console.log(vli);
            vli[1].checked = true; //选中复选框的第二项
            console.log(vli[1].value);  //选中之后值为2
    
            var vradio = document.getElementsByName('interesting');
            console.log(vradio);
            vradio[1].checked = true; //选中单选框的第二项
            console.log(vradio[1].value);
    
    
            var vselect = document.getElementById('i6');
            console.log(vselect.value);      // 默认为第一项上海,value为 11
            var voption = vselect.children; //选中之后值为22
            voption[1].selected = true;  //选中第二项北京
    
    
        </script>
    </body>
    </html>  

     下面再来看一个用单选框做的全选,反选,取消的小例子。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="btn">
            <!--<input type="button" value="全选" onclick="SAll();">-->
            <!--<input type="button" value="反选" onclick="RAll();">-->
            <!--<input type="button" value="取消" onclick="CAll();">-->
            <input type="button" value="全选" onclick="Fun('S');">
            <input type="button" value="反选" onclick="Fun('R');">
            <input type="button" value="取消" onclick="Fun('C');">
        </div>
    
        <div>
            <table>
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>用户名</th>
                        <th>年龄</th>
                    </tr>
                </thead>
                <tbody id="tb">
                    <tr>
                        <td><input class="inp" type="radio" value="1"></td>
                        <td>jason</td>
                        <td>20</td>
                    </tr>
                     <tr>
                        <td><input class="inp" type="radio" value="1"></td>
                        <td>jason</td>
                        <td>20</td>
                    </tr>
                     <tr>
                        <td><input class="inp" type="radio" value="1"></td>
                        <td>jason</td>
                        <td>20</td>
                    </tr>
                     <tr>
                        <td><input class="inp" type="radio" value="1"></td>
                        <td>jason</td>
                        <td>20</td>
                    </tr>
                </tbody>
            </table>
        </div>
    
        <script>
            function SAll() {
                var tb = document.getElementById('tb');
                var inp = tb.getElementsByTagName('input');
                for(var i=0;i<inp.length;i++){
                    inp[i].checked = true;
                }
            }
            function CAll() {
                var tb = document.getElementById('tb');
                var inp = tb.getElementsByClassName('inp');
                for(var i=0;i<inp.length;i++){
                    inp[i].checked = false;
                }
            }
            function RAll() {
                var tb = document.getElementById('tb');
                var inp = tb.getElementsByClassName('inp');
                for(var i=0;i<inp.length;i++){
                    if(inp[i].checked){
                        inp[i].checked = false;
                    } else{
                        inp[i].checked = true;
                    }
                }
            }
    
            // 用一个函数加上switch函数解决
            function Fun(arg) {
                var tb = document.getElementById('tb');
                var inp = tb.getElementsByTagName('input');
                switch(arg){
                    case 'S':
                        for(var i=0;i<inp.length;i++){
                            inp[i].checked = true;
                        }
                        break;
                    case 'C':
                        for(var i=0;i<inp.length;i++){
                            inp[i].checked = false;
                        }
                        break;
                    case 'R':
                        for(var i=0;i<inp.length;i++){
                            if(inp[i].checked){
                                inp[i].checked = false;
                            }else{
                                inp[i].checked = true;
                            }
                        }
                        break;
                    default:
                        break;
                }
            }
        </script>
    </body>
    </html>
    

    2、操作属性

    除了操作内容,还可以操作标签属性,主要用到下面几个方法

    attributes                // 获取所有标签属性
    setAttribute(key,value)   // 设置标签属性
    getAttribute(key)         // 获取指定标签属性
    

    下面来看一下示例  

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="btn">
            <input type="button" onclick="Func();" value="点击" />
            <div id="i1" >
                <div class="c1" alex="gg" jason="hh">123</div>
                <div class="c1" alex="kk">123</div>
                <div class="c1">123</div>
                <div class="c1" alex="kk">123</div>
                <div class="c1" alex="kk">123</div>
                <div class="c1">123</div>
                <div class="c1" alex="kk">123</div>
                <div class="c1">123</div>
            </div>
        </div>
        <script>
           function Func() {
               var d = document.getElementById('i1');
               var dchild = d.children;
               for(var i=0;i<dchild.length;i++){
                   if(dchild[i].getAttribute('alex')=='kk'){
                       dchild[i].innerText = 456;
    
                       dchild[i].setAttribute('ko',666);  // 设置属性
                       console.log(dchild[i].attributes); // 获取所有属性
                   }
               }
           }
        </script>
    </body>
    </html>
    

    下面来看一个更加实用的小例子,点击不同的菜单显示不同的内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .content{
                margin: 0 auto;
                 300px;
                border: 1px solid chocolate;
            }
            ul{
                list-style: none;
                background-color: #cccccc;
            }
            ul li{
                float: left;
                display: block;
                background-color: #2459a2;
                padding:0 10px;
                height: 50px;
                line-height: 50px;
                cursor: pointer;
            }
            .clearfix:after{
                display: block;
                content: '';
                height: 0;
                visibility: hidden;
                clear: both;
            }
            #info{
                min-height: 200px;
                 300px;
            }
            .hide{
                display: none;
            }
            .active{
                background-color: white;
                color: black;
            }
        </style>
    </head>
    <body>
        <div class="content">
            <ul class="clearfix">
                <li tg="1" class="active" onclick="Func(this)">价格走势</li>
                <li tg="2" onclick="Func(this)">市场分布</li>
                <li tg="3" onclick="Func(this)">其他</li>
            </ul>
    
            <div id="info">
                <div targ="1" >conten1</div>
                <div targ="2" class="hide">conten2</div>
                <div targ="3" class="hide">conten3</div>
            </div>
        </div>
    
        <script>
            function Func(ths) {
                var bot = ths.parentElement.children;
                for(var i=0;i<bot.length;i++){
                    bot[i].classList.remove('active')
                }
                ths.classList.add('active');
    
                var vtg = ths.getAttribute('tg');
                var divs = document.getElementById('info').children;
                for(var i=0;i<divs.length;i++){
                    if(divs[i].getAttribute('targ') == vtg){
                        divs[i].classList.remove('hide');
                    }else{
                        divs[i].classList.add('hide');
                    }
                }
    
            }
        </script>
    </body>
    </html>
    

    3、操作标签    

    下面主要演示一下如何操作标签,添加标签有两种方式,一种是以字符串,另外一种是以添加标签对象下面来简单的看一下例子,向列表中添加一项内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="btn">
            <input type="text">
            <input type="button" value="add" onclick="Addlist(this);">
        </div>
    
        <h2 id="h">sss</h2>
        <div id="di">
            <ul id="list">
                <li>123</li>
                <li>123</li>
                <li>123</li>
            </ul>
        </div>
        <script>
            function Addlist(ths) {
                var v = ths.previousElementSibling.value;
                ths.previousElementSibling.value = '';
                var li = document.getElementById('list');
    
                //方式1
    //            var str= '<li>' + v +'</li>';
    //            li.insertAdjacentHTML('beforeEnd',str);
    
                var tag = document.createElement('li');
                if(v.trim().length>0){
                    tag.innerText = v;
                    li.appendChild(tag);
                    li.insertBefore(tag,li.children[1]);
                }
            }
    
            var h = document.getElementById('h');
            var d = document.getElementById('di');
            var neh_h= h.cloneNode(true);         // 不clone的话,以前的会移除
            d.appendChild(neh_h);
        </script>
    
    </body>
    </html>
    

    4、高度  

    高度主要有以下几种情况

    1. scrollTop: 滚动条距离顶部高度
    2. scrollHeight 文档高度:自身+padding
    3. clientTop 边框高度
    4. clientHeight 可见范围的高度:自身+padding
    5. offsetTop 当前标签距离“顶部”的高度
    6. 当前标签距离“上部”定位标签的高度
    7. offsetHeight 可见范围的高度:自身+padding+border

    首先来看一个返回顶部的例子

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .head{
                height: 1500px;
            }
            .hide{
                display: none;
            }
            #d1{
                position: fixed;
                 40px;
                height: 40px;
                right: 20px;
                bottom: 20px;
                background-color: chocolate;
                color: white;
            }
        </style>
    </head>
    <body onscroll="F1();">
        <div class="head">
            <h1>he</h1>
        </div>
        <div id="d1" class="hide">
            <a onclick="Func();">返回顶部</a>
        </div>
        <script>
            function Func() {
                document.body.scrollTop = 0;
            }
            function F1() {
                var h = document.body.scrollTop;
                var d = document.getElementById('d1');
                if(h>100){
                    d.classList.remove('hide');
                }else{
                    d.classList.add('hide');
                }
    
            }
        </script>
    </body>
    </html>
    

    下面在来看一个比较重要的布局,随着页面内容相应的菜单内容也跟着变化

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .header{
                height: 50px;
                 100%;
                background-color: black;
            }
    
            .menu{
                position: absolute;
                min-height: 300px;
                background-color: azure;
                 200px;
                left:150px;
            }
            #article{
                position: absolute;
                min-height: 700px;
                 700px;
                background-color: burlywood;
                left: 350px;
            }
            ul{
                list-style: none;
            }
            ul li{
                display: block;
                 100%;
                height: 40px;
                line-height: 40px;
                text-align: center;
            }
            #article .artc{
                height: 900px;
                background-color: lavenderblush;
            }
            .fixed{
                position: fixed;
                top: 0;
            }
            .active{
                background-color: #2459a2;
            }
    
        </style>
    
    </head>
    <body onscroll="Hua();">
        <div class="header">
    
        </div>
        <div class="body">
            <div class="content ">
                <div class="menu" id="menu">
                    <ul>
                        <li>第一章</li>
                        <li>第二章</li>
                        <li>第三章</li>
                    </ul>
                </div>
                <div id="article">
                    <div  class="artc">
                        <p>content</p>
                    </div>
                    <div  class="artc">
                        <p>sontent</p>
                     </div>
                    <div  style="height: 300px" class="artc">
                        <p>sontent</p>
                    </div>
                </div>
            </div>
        </div>
    
        <script>
            function Hua() {
                var huaHeight = document.body.scrollTop;
                var menu = document.getElementById('menu');
    
                if(huaHeight>50){
                    menu.classList.add('fixed');
                }else{
                    menu.classList.remove('fixed');
                }
    
                var articles = document.getElementById('article').children;
                var menuitem = menu.getElementsByTagName('li');
    
                for(var i=0;i<articles.length;i++){
                    var artofftop = articles[i].offsetTop;
                    var artoffheight = articles[i].offsetHeight;
    //                console.log(huaHeight,artofftop,artoffheight,i,clienthight);
                    if(huaHeight-48>=artofftop){
                        for(var j=0;j<articles.length;j++){
                            menuitem[j].classList.remove('active')
                        }
                        menuitem[i].classList.add('active');
                    }
                }
    
                var clienthight =document.documentElement.clientHeight;
                if(huaHeight+clienthight == artofftop+artoffheight+50){
                     for(var j=0;j<articles.length;j++){
                        menuitem[j].classList.remove('active')
                     }
                     menuitem[articles.length-1].classList.add('active');
                }
            }
        </script>
    </body>
    </html>
    

    五、其他操作  

    document.geElementById('form').submit()  //表单提交
    
    console.log                 输出框
    alert                       弹出框
    confirm                     确认框
      
    // URL和刷新
    location.href               获取URL
    location.href = "url"       重定向
    location.reload()           重新加载
      
    // 定时器
    setInterval                 多次定时器
    clearInterval               清除多次定时器
    setTimeout                  单次定时器
    clearTimeout                清除单次定时器
    

    下面来看一下代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body >
    
    <input type="button" value="确出框" onclick="Confirm();">
    <input type="button" value="定时器" onclick="Interval();">
    <input type="button" value="取消定时器" onclick="Uninterval();">
    <input type="button" value="单次定时器" onclick="Mytimeout();">
    <input type="button" value="取消单次定时器" onclick="Unmytimeout();">
    
    
    <div id="btns">
        <input type="button" value="点我">
        <input type="button" value="点我">
        <input type="button" value="点我">
    </div>
    
    <div id="i1">
    
    </div>
    
    </body>
    
    <script>
    
            //location.href               获取URL
            //location.href = "url"       重定向
            //location.reload()           重新加载
    
        function Confirm() {
            var ret = confirm('xxxxxxx');
            console.log(ret);
        }
    
        function f1() {
            console.log(123);
        }
        function Interval() {
            t1 = setInterval(f1,1000);
    //        t1 = setInterval(function () {
    //            console.log(2222)
    //        },1000)
        }
        
        function Uninterval() {
            clearInterval(t1);
        }
    
        function Mytimeout() {
            document.getElementById('i1').innerText = 'xxxxxx';
            t2 = setTimeout(function () {
                document.getElementById('i1').innerText = '';
            },2000)
        }
    
        function Unmytimeout() {
            clearTimeout(t2);
        }
    
    

    // 下面的代码是两个特殊的示例,需要特别的注意下 function f2() { for (var i=0;i<3;i++){ setInterval((function (arg) { //立即执行,函数没有返回值 console.log(arg); })(i),1000) } } f2(); var btns = document.getElementById('btns').children; for(var j=0;j<btns.length;j++){ btns[j].onclick = function () { alert(j); } } </script> </html>

    六、事件 

    对于事件需要注意的要点:

    • this
    • event
    • 事件链以及跳出

    this标签当前正在操作的标签,event封装了当前事件的内容。

  • 相关阅读:
    ASP.NET 后台弹出确认提示问题
    stretchableImageWithLeftCapWidth 自动适应UITableView
    UIBotton UIlabel Ios 下拉框
    cellForRowAtIndexPath UITableViewCell 选中后的背景颜色设置
    iOS 获得键盘的高度 NSNotificationCenter
    UIlabel 最小字体设置。
    NSMutableDictionary 与 NSMutableArray注意的地方
    iOS 背景图片。按钮高亮自定义背景
    iOS 判断当前输入法。UITextInputMode
    AudioServicesPlaySystemSound 系统声音提示 iOS iPad
  • 原文地址:https://www.cnblogs.com/Wxtrkbc/p/5649516.html
Copyright © 2011-2022 走看看