zoukankan      html  css  js  c++  java
  • Dom

     DOM:

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

    一. Dom中查找元素   

        1.直接选择器

                 document.getElementsByName          根据name属性获取标签集合

                 document.getElementsByClassName     根据class属性获取标签集合

                 document.getElementsByTagName       根据标签名获取标签集合

              document.getElementById             根据ID获取一个标签     

        2.间接选择器

    parentNode          // 父节点
    childNodes          // 所有子节点
    firstChild          // 第一个子节点
    lastChild           // 最后一个子节点
    nextSibling         // 下一个兄弟节点
    previousSibling     // 上一个兄弟节点
     
    parentElement           // 父节点标签元素
    children                // 所有子标签
    firstElementChild       // 第一个子标签元素
    lastElementChild        // 最后一个子标签元素
    nextElementtSibling     // 下一个兄弟标签元素
    previousElementSibling  // 上一个兄弟标签元素

    二. Dom中操作元素

          1. innerText:

                    获取标签中的文本内容;tag.innerText

                     对标签内部文本进行更新: tag.innerText = “” 

           2. className(样式操作)

                   tag.className =  :直接整体做操作

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

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

           3.innerHTML

                    获取标签中的全部内容,包括标签

            4.value

                     input系列 :获取当前标签中的值;

                    select 标签:获取选中的value值;

                     textarea(多行文本):value获取当前标签中的值。

            5.搜索框的示例:

             旧版:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div style=" 600px;margin: 0 auto ">
            <input id="i1" onfocus="Focus();" onblur="Blur();" on type="text" value="请输入关键字"/>
            <!--onfocus:当鼠标放上去的时候自动检索光标,  onblur:当光标移走的时候重新显示原来的值-->
        </div>
        <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 ==""){
                    tag.value = "请输入关键字";
                }
            }
        </script>
    </body>
    </html>
    View Code

               新版:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div style=" 600px;margin: 0 auto ">
            <input type="text" placeholder="请输入关键字"/>
        </div>
    </body>
    </html>
    View Code

           模态示例:

              

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
            .c1{
                position: fixed;
                left: 0;
                top:0;
                right:0;
                bottom: 0;
                background-color: black;
                opacity: 0.6;
                z-index: 9;
            }
            .c2{
                width: 500px;
                height: 400px;
                background-color: white;
                position: fixed;
                left: 50%;
                top:50%;
                margin-left: -250px;
                margin-top: -200px;
                z-index: 10;
            }
        </style>
    </head>
    <body style="margin: 0;">
    <!--body默认有边距的,通过设置margin:0  去掉边距-->
        <div>
            <input type="button" value="添加" onclick="ShowModel()" />
            <table>
                <thead>
                    <tr>
                        <th>主机名</th>
                        <th>端口</th>
                    </tr>
                </thead>
    
                <tbody>
                     <tr>
                         <td>1.1.1.1</td>
                         <td>190</td>
                     </tr>
                     <tr>
                         <td>1.1.1.2</td>
                         <td>192</td>
                     </tr>
                     <tr>
                         <td>1.1.1.3</td>
                         <td>193</td>
                     </tr>
                </tbody>
            </table>
    
        </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>
    </html>

    效果:

     3. checkbox

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
            .c1{
                position: fixed;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                background-color: black;
                opacity: 0.6;
                z-index: 9;
            }
            .c2{
                width: 500px;
                height: 400px;
                background-color: white;
                position: fixed;
                left: 50%;
                top: 50%;
                margin-left: -250px;
                margin-top: -200px;
                z-index: 10;
            }
        </style>
    </head>
    <body style="margin: 0;">
    
        <div>
            <input type="button" value="添加" onclick="ShowModel();" />
            <input type="button" value="全选" onclick="ChooseAll();" />
            <input type="button" value="取消" onclick="CancelAll();" />
            <input type="button" value="反选" onclick="ReverseAll();" />
    
            <table>
                <thead>
                    <tr>
                        <th>选择</th>
                        <th>主机名</th>
                        <th>端口</th>
                    </tr>
                </thead>
                <tbody id="tb">
    
                    <tr>
                        <td>
                            <input type="checkbox" />
                        </td>
                        <td>1.1.1.1</td>
                        <td>190</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox" id="test" /></td>
                        <td>1.1.1.2</td>
                        <td>192</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox" /></td>
                        <td>1.1.1.3</td>
                        <td>193</td>
                    </tr>
                </tbody>
            </table>
        </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');
            }
    
            function ChooseAll(){
                var tbody = document.getElementById('tb');
                // 获取所有的tr
                var tr_list = tbody.children;
                for(var i=0;i<tr_list.length;i++){
                    // 循环所有的tr,current_tr
                    var current_tr = tr_list[i];
                    var checkbox = current_tr.children[0].children[0];
                    checkbox.checked = true;
    
                }
            }
    
            function CancelAll(){
                var tbody = document.getElementById('tb');
                // 获取所有的tr
                var tr_list = tbody.children;
                for(var i=0;i<tr_list.length;i++){
                    // 循环所有的tr,current_tr
                    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;
                for(var i=0;i<tr_list.length;i++){
                    // 循环所有的tr,current_tr
                    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>
    </html>
    View Code

    效果:

     注:JS语句必须加分号;

        

        6.属性及创建标签 

        1].对标签中的属性进行操作

               1).attributes

               2). getattribute

               3). removeattribute

         2].创建标签,并添加到HTML中

                两种方式:1)字符串形式(代码中方式1)

                                   2)对象的方式(代码中方式2)

                                             document.createElement('div')  :创建div标签

                                             document.createElement('input')  :创建input标签

                                             document.createElement(p')  :创建p标签

    <!--类似于点赞的,点一次,访问量加1-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--<input type="button" onclick="AddEle1();" value="+" />-->
        <input type="button" onclick="AddEle2();" value="+" />
        <div id="i1">
            <p><input type="text" /></p>
            <!--p标签分段落-->
    
            <!--<hr />-->
            <!--分割线-->
    
        </div>
        <script>
            // function AddEle1() {
            //     //创建一个标签;方式1
            //     //将标签添加到i1里面;
            //     var tag = "<p><input type='text' /></p>";
            //     document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag)
            // }
    
            function AddEle2() {
                //创建一个标签;方式2
                //将标签添加到i1里面;
                var tag = document.createElement('input');
                tag.setAttribute('type', 'text');
                tag.style.fontSize="16px";
                tag.color="red";
                document.getElementById('i1').appendChild(tag)
    
            }
        </script>
    </body>
    </html>
    View Code
    document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag)
    第一个参数只能是beforeBegin; afterBigin ; beforeEnd ; afterEnd 控制标签添加的位置

      

                 7 . 提交表单            

                  通过DOM,任何标签(不仅仅是form)都可以提交表单;

    <!--提交表单,方式2:通过a标签-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form id="f1" action="http://www.baidu.com">
            <input type="text" />
            <a style="border: black solid 1px" onclick="submitForm();">提交吧</a>
        </form>
    
        <script>
            function submitForm() {
                document.getElementById('f1').submit()
            }
        </script>
    
        </div>
    </body>
    </html>

               8.  其他

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

    单次定时器之QQ邮箱中删除邮件后提示信息:

    <!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);
                // 5秒后“已删除”提示消失
                
            }
        </script>
    </body>
    </html>

    三. 事件

    绑定事件有两种方式:

            1)直接标签绑定:

             2)先获取dom对象,然后进行绑定:

           

                        注:对于this,指向当前触发事件的标签,(this不要瞎用,用第二种)

                  第一种绑定方式:<input type="button" onclick='clickOn(this)'>

                                                   function clickOn(self){

                                                       //self 当前点击的标签

                                                      }

                   

                               第二种绑定方式:<input id="i1" type="button" >

                                                             document.getElementByID(‘i1’).onclick = function(){

                                                                 //this. 当前点击的标签

                                                                 }

             

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="test">
            zhangsan
        </div>
        <script>
            var mydiv = document.getElementById('test');
            console.log(mydiv);
            mydiv.onclick = function () {
                console.log('lisi');
            }
            mydiv.onclick = function () {
                console.log('孜彧');
            }
            // 当程序执行到这里的时候,第一个匿名函数的console.log()的内容会被第二个覆盖,怎么做才会同时绑定两个事件呢??
            // 这就要用到我们的第三种事件绑定方式
        </script>
    </body>
    </html>
    View Code

                                 第三种绑定方式:  addEventListener()

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="test">
            zhangsan
        </div>
        <script>
            var mydiv = document.getElementById('test');
            mydiv.addEventListener("click",function () {console.log("孜彧")},false);
            mydiv.addEventListener("click",function () {console.log("呵呵")},false);
            // 三个参数:①事件   ②匿名函数  ③false/true
            // false:事件之冒泡模型  true:事件之捕捉模型
        </script>
    </body>
    </html>

                事件之捕捉与冒泡模型:(高级写法,面试常用)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        #main{
            background-color: red;
            width: 400px;
            height: 300px;
        }
         #content{
            background-color: pink;
            width: 200px;
            height: 150px;
        }
    </style>
    <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);
            // 首先打印的是main  ,然后打印的是content
            // false:事件之冒泡模型
    
            mymain.addEventListener("click",function () {console.log("main")},true);
            mycontent.addEventListener("click",function () {console.log("content")},true);
            // 首先打印的是content  ,然后打印的是main
            //  true:事件之捕捉模型
            // 面试题
        </script>
    </body>
    </html>
    View Code

                              

    常用事件:

       1.onclick

       2.onblur

       3.onfocus

       4.onmouseover

       5.onmouseout

    行为(js) 样式(CSS ) 结构(html)相分离的示例(代码框架略显高级):

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <table border="1px" width="300px">
            <tr>
                <td>1</td>
                <td>1</td>
                <td>1</td>
            </tr>
            <tr>
                <td>2</td>
                <td>2</td>
                <td>2</td>
            </tr>
            <tr>
                <td>3</td>
                <td>3</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].onmouseover = function () {
                    this.style.backgroundColor = "red";
                    // myTrs[i].style.backgroundColor = "red"; 用 myTrs[i]是行不通的,为什么??? 作用域不同
                }
    
                 myTrs[i].onmouseout = function () {
                    this.style.backgroundColor = "";
                }
            }
        </script>
    </body>
    </html>

                 this:当前谁触发事件,就指向那个标签;

           table会自动加thead,tbody,用children查找的时候要注意,直接找tr找不到;

     四.  js词法分析(*********重点*********)

         

          1.浏览器在执行代码之前会进行分析,函数在形成调用的那一瞬间会形成一个活动对象:active object --->AO

           依次分析:形式参数

                             局部变量

                             函数申明表达式

           词法分析完,从活动对象中去执行(有优先级);

    <!--js词法分析-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <script>
            function t1(age) {    
                console.log(age);  //
                var age = 27;
                console.log(age); //
                function age() {}
                console.log(age);
            }
            t1(3);
        </script>
    </body>
    </html>

    运行结果:

    虽然不会像上述代码中去定义,但是要明白代码执行机理。

    ===============================================================================================================================================

    学习心得分享:

    手册查询:w3school

                      css完全参考手册 3.0

    前端编译器:subline Text(Emmet插件)  提高编写效率,也支持python,

  • 相关阅读:
    行政区划遮罩 -Leaflet
    WebGIS vs WebGL图形编程
    oracle 中 group by 加强
    Nagios监控服务搭建
    MySQL触发器使用详解
    mybatis--一对多关联
    mybatis--一对一关联查询
    mybatis--实现数据库增删改查
    mybatis--使用接口注解的方式实现Helloword
    mybatis--第一个mybatis程序
  • 原文地址:https://www.cnblogs.com/bltstop/p/10703323.html
Copyright © 2011-2022 走看看