zoukankan      html  css  js  c++  java
  • DOM

    DOM

    找到标签

    直接找:

    var b = document.getElementById(‘i1')  //根据ID获取一个标签

    var a = document.getElementsByClassName('c1')  //根据class属性获取标签集合

    var c = document.getElementsByName()  //根据name属性获取标签集合

    var d = document.getElementsByTagName('div')  //根据标签名获取标签集合

    间接找

    parentNode          // 父节点

    childNodes          // 所有子节点

    firstChild          // 第一个子节点

    lastChild           // 最后一个子节点

    nextSibling         // 下一个兄弟节点

    previousSibling     // 上一个兄弟节点

    parentElement           // 父节点标签元素

    children                // 所有子标签

    firstElementChild       // 第一个子标签元素

    lastElementChild        // 最后一个子标签元素

    nextElementtSibling     // 下一个兄弟标签元素

    previousElementSibling  // 上一个兄弟标签元素

    操作标签

    1. 文本操作

    标签.innerText   //获取标签中的文本内容,如:

    document.getElementById(‘i1').innerText

    标签.innerHTML  //获取标签中的全部内容,如:

    document.getElementById(‘i1').innerHTML

    标签.innerText=””  //对内部标签重新赋值,如:

    document.getElementById(‘i1').innerText='新内容'

    标签.value

      input  value获取当前标签中的值

      select  获取选中的value值(selectIndex)

      textarea  value获取当前标签中的值

     搜索框的示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input id="i1" onfocus="Focus()" onblur="Blur()" type="text" value="请输入关键字" />
        <script>
            function Focus() {
                var tag = document.getElementById('i1');
                var val = tag.value;
                if(val=="请输入关键字"){
                    tag.value=""
                }
            }
            function Blur() {
                var tag = document.getElementById('i1');
                var val = tag.value;
                if(val.length==0){
                    tag.value="请输入关键字"
                }
            }
        </script>
    </body>
    </html>

    当输入框获得焦点的时候输入框中内容清空,离开恢复

    在最新的浏览器上可以通过如下实现:

    <input type="text" placeholder="请输入关键字" >
    2. 样式操作

    tag.className => 直接整体操作

    tag.classList.add(‘样式名’):添加指定样式

    tag.classList.remove(‘样式名’): 删除指定样式

    tag.style.样式属性 

    3. 属性操作

    obj.attributes    获取所有的属性

    obj.getAttribute  设置属性

    obj.removeAttribute 删除属性

    4. 创建标签

    第一种方式:以字符串形式创建

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="button" onclick="AddEle()" value="添加">
        <div id="i1">
            <p><input type="text" /></p>
    
        </div>
        <script>
            function AddEle() {
                var tag = "<p><input type='text' /></p>"
                document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag)
            }
        </script>
    
    </body>
    </html>

    点击添加,依次添加一个输入框

    document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag)

    这里有三个参数:beforeBegin、afterBegin、beforeEnd、afterEnd

    分别表示在不同的位置插入

    第二种方式:(以对象方式创建)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="button" onclick="AddEle2()" value="添加">
        <div id="i1">
            <p><input type="text" /></p>
        </div>
        <script>
            function AddEle2() {
                var tag = document.createElement('input');
                tag.setAttribute('type','text')
                var p = document.createElement('p');
                p.appendChild(tag)
                document.getElementById('i1').appendChild(p);
            }
        </script>
    
    </body>
    </html>

    和方式一实现相同的效果

     5. Dom提交表单

    任何标签通过DOM都可提交表单

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form id="f1" action="https://www.baidu.com">
            <input type="text" />
            <input type="submit" value="提交" />
            <a onclick="submitForm();">提交吧</a>
        </form>
        <script>
            function submitForm(){
                document.getElementById('f1').submit();
            }
        </script>
    
    </body>
    </html>

    实现效果如下:

    点击 提交吧按钮,会跳转到百度页面。

    6. 其他操作

    console.log(123)  //输出框

    alert(123)       //弹出框

    var v = confirm('信息')     //确认框,选择确定,v:true;选择取消,v:false

    //url刷新

    location.href       获取url

    location.href = "https://www.baidu.com"      重定向,跳转

    location.href = location.href 和 location.reload()    重新加载,刷新

    //定时器

    var obj1 = setInterval(function(){}, 5000)         //多次定时器

    clearInterval(obj1)       //清除多次定时器

    var obj2 = setTimeout(function(){}, 50000)          //单次定时器

    clearTimeout(obj2)        //清除单次定时器

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="status"></div>
        
        <input type="button" value="删除" onclick="DeleteEle();" />
    
        <script>
            function DeleteEle(){
                document.getElementById('status').innerText = "已删除";
                setTimeout(function (){
                    document.getElementById('status').innerText = "";
                }, 5000);
            }
        </script>
    
    </body>
    </html>

    事件

    注意:

    我们之前写html代码都是最普通的Dom0的写法,在工作中不建议用,工作中要实现行为、样式、结构相分离的页面,即js、css、html相分离

    代码例子如下:

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #i1{
                background-color: red;
                 300px;
                height: 400px;
            }
        </style>
    </head>
    <body>
        <div id="i1">
            aaaa
        </div>
        
        <script>
            var mydiv=document.getElementById('i1')
            mydiv.onclick=function () {
                console.log('aaaaa')
            }
        </script>
    
    </body>

    这样就实现了三部分的分离,而不用和之前一样,将js的调用还放在html语言中

    再写一个例子

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <table border="1" width="300px">
            <tr onmouseover="t1(0);" onmouseout="t2(0);"><td>1</td><td>2</td><td>3</td></tr>
            <tr onmouseover="t1(1);" onmouseout="t2(1);"><td>1</td><td>2</td><td>3</td></tr>
            <tr onmouseover="t1(2);" onmouseout="t2(2);"><td>1</td><td>2</td><td>3</td></tr>
        </table>
            <script>
                function t1(n){
                    var myTrs = document.getElementsByTagName("tr")[n];
                    myTrs.style.backgroundColor = "red";
                }
    
                function t2(n){
                    var myTrs = document.getElementsByTagName("tr")[n];
                    myTrs.style.backgroundColor = "";
                }
            </script>
    </body>
    </html>
    DOM0写法
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <table border="1" width="300px">
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
        </table>
    
    
        <script>
            var myTrs = document.getElementsByTagName('tr');
            var len = myTrs.length;
            for(var i =0;i<len;i++){
                myTrs[i].onmousemove=function () {
                    //这里的this不能换成myTrs[i],并且谁调用这个函数这个this就指向谁
                    this.style.backgroundColor = "red";
                }
                myTrs[i].onmouseout=function () {
                    //这里的this不能换成myTrs[i],并且谁调用这个函数这个this就指向谁
                    this.style.backgroundColor = "";
                }
            }
        </script>
    </body>
    <html/>

    实现的效果如下:

    鼠标放在哪一行,就会有红色的背景色,离开的时候红色就会消失

    小结:

    绑定事件的两种方式:

    a. 直接标签绑定 onclick='xxx()'  onfocus

    b. 先获取DOM对象,然后进行绑定

      document.getElementById('xx').onclick

      document.getElementById('xx').onfocus

    this,当前触发事件的标签

      

    第一种绑定方式

    <input id="i1" type="button" onclick="ClickOn(this)">
    
    function ClickOn(self){
        // self 当前点击的标签
    }

      

    第二种绑定方式

    <input id="i1" type="button" >
    document.getElementById('i1').onclick = function(){
        // this 代指当前点击的标签
    }

    第三种绑定方式(DOM2)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="test">
            aaa
        </div>
        <script>
            var mydiv = document.getElementById('test')
            mydiv.addEventListener("click",function () {
                console.log("aaa")
            },false)
            mydiv.addEventListener("click",function () {
                console.log("bbb")
            },false)
        </script>
    </body>
    <html/>

    这样就实现了点击同时执行两个事件

    最后的一个参数需要注意:

    false:冒泡模型

    true:捕捉模型

    通过下面例子理解冒泡和捕捉模型

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #main{
                background-color: red;
                 300px;
                height: 400px;
            }
            #content{
                background-color: pink;
                 150px;
                height: 200px;
            }
        </style>
    </head>
    <body>
        <div id="main">
            <div id="content"></div>
        </div>
        <script>
            var mymain=document.getElementById('main')
            var mycontent=document.getElementById('content')
            mymain.addEventListener("click",function () {
                console.log("main")
            },false)
            mycontent.addEventListener("click",function () {
                console.log("content")
            },false)
    
        </script>
    </body>

     

    当点击粉色区域的时候先出的是content后出现main

    因为参数设置的是flase,所以采用的是冒泡

    如果参数设置为true

    如上所示,当点击粉色区域的时候先出的是main后出现content

    关于模态对话框

    通过对上面的应用的一个例子代码如下:

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
            .c1{
                position: fixed;
                top: 0;
                left:0;
                right: 0;
                bottom: 0;
                background-color: black;
                opacity: 0.5;
                z-index: 9;
            }
            .c2{
                 500px;
                height: 400px;
                background-color: white;
                position: fixed;
                left: 50%;
                top: 50%;
                margin-left: -250px;
                margin-top: -200px;
                z-index: 10;
            }
        </style>
    </head>
    <body>
        <div>
            <input type="button" value="添加" onclick="ShowModel()">
        </div>
    
        <!--遮罩层开始-->
        <div id ="i1" class="c1 hide"></div>
        <!--遮罩层结束-->
    
        <div  id ="i2" class="c2 hide">
            <p><input type="text"></p>
            <p><input type="text"></p>
            <p>
                <input type="button" value="取消" onclick="HideModel()" />
                <input type="button" value="确定" />
            </p>
        </div>
        <script>
            function ShowModel() {
                document.getElementById("i1").classList.remove('hide');
                document.getElementById("i2").classList.remove('hide');
            }
            function HideModel() {
                document.getElementById("i1").classList.add('hide');
                document.getElementById("i2").classList.add('hide');
            }
        </script>
    
    </body>

    实现效果如下:

    打开程序之后默认界面如下所示:

    点击添加之后:

    点击取消则:

    反选、全选以及取消

    代码例子如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <input type="button" value="添加">
            <input type="button" value="全选" onclick="ChooseAll()">
            <input type="button" value="取消" onclick="CanclelAll()">
            <input type="button" value="反选" onclick="ReverseAll()">
            <p></p>
            <table border="1px">
                <thead>
                    <th>选择</th>
                    <th>主机名</th>
                    <th>端口</th>
                </thead>
                <tbody id="tb">
                    <tr>
                        <td><input type="checkbox" /> </td>
                        <td>192.168.1.1</td>
                        <td>80</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox" /> </td>
                        <td>192.168.1.2</td>
                        <td>8080</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox"  /> </td>
                        <td>192.168.1.3</td>
                        <td>81</td>
                    </tr>
    
                </tbody>
            </table>
        </div>
        <script>
            function ChooseAll() {
                var tbody = document.getElementById('tb');
                //获取所有的tr
                var tr_list = tbody.children;
                //循环所有的tr
                for(var i = 0;i<tr_list.length;i++){
                    var current_tr = tr_list[i]
                    var checkbox=current_tr.children[0].children[0]
                    checkbox.checked=true
                }
            }
            function CanclelAll() {
                var tbody = document.getElementById('tb');
                //获取所有的tr
                var tr_list = tbody.children;
                //循环所有的tr
                for(var i = 0;i<tr_list.length;i++){
                    var current_tr = tr_list[i]
                    var checkbox=current_tr.children[0].children[0]
                    checkbox.checked=false
                }
            }
            function ReverseAll() {
                var tbody = document.getElementById('tb');
                //获取所有的tr
                var tr_list = tbody.children;
                //循环所有的tr
                for(var i = 0;i<tr_list.length;i++){
                    var current_tr = tr_list[i];
                    var checkbox=current_tr.children[0].children[0];
                    if (checkbox.checked){
                        checkbox.checked=false;
                    }
                    else{
                        checkbox.checked=true;
                    }
                }
            }
        </script>
    </body>

     实现效果如下:

    当点击全选:

    点击反选 ,则会把已选中的取消,未选中的则选中。

    点击取消,则会把选中的都取消掉。

    后台管理左侧菜单

    代码例子如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hider{
                display: none;
            }
            .item .header{
                height: 35px;
                background-color: blue;
                color: white;
                line-height: 35px;
            }
        </style>
    </head>
    <body>
        <div style="height: 48px"></div>
    
        <div style=" 300px">
            <div class="item">
                <div id='i1' class="header" onclick="ChangeMenu('i1')";>菜单1</div>
                <div class="content hider">
                    <div>内容1</div>
                    <div>内容1</div>
                    <div>内容1</div>
                </div>
            </div>
            <div class="item">
                <div id='i2' class="header" onclick="ChangeMenu('i2')";>菜单2</div>
                <div class="content hider">
                    <div>内容2</div>
                    <div>内容2</div>
                    <div>内容2</div>
                </div>
            </div>
            <div class="item">
                <div id='i3' class="header" onclick="ChangeMenu('i3')";>菜单3</div>
                <div class="content hider">
                    <div>内容3</div>
                    <div>内容3</div>
                    <div>内容3</div>
                </div>
            </div>
            <div class="item">
                <div id='i4' class="header" onclick="ChangeMenu('i4')";>菜单4</div>
                <div class="content hider">
                    <div>内容4</div>
                    <div>内容4</div>
                    <div>内容4</div>
                </div>
            </div>
        </div>
        <script>
            function ChangeMenu(nid) {
                var currnet_header = document.getElementById(nid);
                var item_list = currnet_header.parentElement.parentElement.children
                for(var i=0;i<item_list.length;i++){
                    var currnet_item = item_list[i];
                    currnet_item.children[1].classList.add("hider")
                }
    
                currnet_header.nextElementSibling.classList.remove('hider')
            }
        </script>
    </body>

    实现效果如下:

    默认情况下打开时各个菜单都是闭合的

    当选择其中一个菜单的时候,则打开当前选中的菜单,关闭其余已打开的菜单:

    <input id="i1" type="button" onclick="ClickOn(this)">

    function ClickOn(self){
    // self 当前点击的标签
    }
  • 相关阅读:
    BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
    BZOJ3759: Hungergame 博弈论+线性基
    NOI模拟赛Day2
    期望dp BZOJ3450+BZOJ4318
    NOI模拟赛 Day1
    NOI模拟 热身赛T1
    【BZOJ4260】 Codechef REBXOR 可持久化Trie
    【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
    【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队
    【bzoj3527】[Zjoi2014]力 FFT
  • 原文地址:https://www.cnblogs.com/cyfiy/p/9759200.html
Copyright © 2011-2022 走看看