zoukankan      html  css  js  c++  java
  • JavaScript DOM编程

    一、基础知识点

      1、概念:文档对象模型Document  Object  Model,DOM定义了访问和处理HTML文档的标准方法

      2、页面加载过程:

         浏览器接收到html代码,开始解析。解析过程是先构建dom树,再根据dom树构建渲染树,最后浏览器将渲染树绘制到页面上。构建dom树的过程即根 据html代码自上而下进行构建,当遇到script文件加载/执行会阻塞后面dom树的构建(javascript可能会改变dom树),而遇到css文件则会阻塞渲染树的构建,即dom树依然继续构建(除非遇到script标签并且css文件依旧未加载完成),但不会渲染绘制到页面上。

                                                   

      3、节点

          Node:构成HTML文档最基本的单元

          分类:

            元素节点:HTML标签

            属性节点:标签的属性,键值对形式,属性名为键,属性值为值

            文本节点:HTML标签中的文本内容

                                

      4、document对象

            document是一个文档节点,代表整个文档,所有节点都是他的后代节点;是window的对象属性,可以直接使用

            每个载入浏览器的 HTML 文档都会成为 Document 对象。

            Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问

    二、DOM查询

       1、获取文档元素的子节点:

            通过document对象调用:

                document.getElementById();    通过id属性获取一个元素节点对象

              //查找id为bj的节点
              var btn01=document.getElementById("btn01");    btn01.onclick=function(){ var btnEle=document.getElementById("bj"); alert(btnEle.innerHTML); }

                document.getElementsByTagName();  通过标签名获取一组元素节点对象

              //查找所有li节点
              var btn02=document.getElementById("btn02");    btn02.onclick=function(){ var liEles=document.getElementsByTagName("li"); for(var i=0;i<liEles.length;i++){ alert(liEles[i].innerHTML); } }

                document.getElementsByName();    通过name属性获取一组元素节点对象

              //查找name=genger的所有节点
             var btn03=document.getElementById("btn03");    btn03.onclick=function(){ var Eles=document.getElementsByName("gender"); for(var i=0;i<Eles.length;i++){ alert(Eles[i].value); } }

       2、获取某一元素的子节点

    通过具体的元素节点调用
      类型 作用
    getElementsByTagName();  方法 返回当前节点的指定标签名的子节点
    childNodes 属性 表示当前节点的所有子节点
    firstChild  属性 表示当前节点的第一个子节点
    lastChild 属性 表示当前节点的最后一个子节点
    parentNode 属性 表示当前节点的父节点
    previousSibling 属性 表示当前节点的前一个兄弟节点
    nextSibling 属性 表示当前节点的后一个兄弟节点

          元素节点的属性:

              获取:元素对象.属性名

              设置:元素对象.属性名=新的值

          其他属性:

              nodeValue:元素节点nodeValue属性值为null,文本节点可以通过nodeValue属性获取和设置文本节点的内容

              innerHTML:元素节点通过该属性获取和设置标签内部的html代码

    3、练习1:

                                              

      封装为按钮绑定事件的方法:

    1        function myQuery(idStr,func){
    2                 var btn=document.getElementById(idStr);
    3                 btn.onclick=func;
    4             };

                               以下代码都写在window.onload=function(){  }中

      1.查找id为bj的节点

    1        myQuery("btn01",function(){
    2                 var bjEle=document.getElementById("bj");
    3                 alert(bjEle.innerHTML);
    4             });

       2.查找所有li节点

    1        myQuery("btn02",function(){
    2                 var liEles=document.getElementsByTagName("li");
    3                 for(var i=0;i<liEles.length;i++){
    4                     alert(liEles[i].innerHTML);
    5                 }
    6             });

      3.查找name=gender的所有节点

    1        myQuery("btn03",function(){
    2                 var Eles=document.getElementsByName("gender");
    3                 for(var i=0;i<Eles.length;i++){
    4                     alert(Eles[i].value);
    5                 }
    6             });

      4.查找id为city的节点下所有li节点

    1        myQuery("btn04",function(){
    2                 var cityEle=document.getElementById("city")
    3                 var liEles=cityEle.getElementsByTagName("li");
    4                 for(var i=0;i<liEles.length;i++){
    5                     alert(liEles[i].innerHTML);
    6                 }
    7             });

      5.返回id为city的节点的所有子节点

    1        myQuery("btn05",function(){
    2                 var cityEle=document.getElementById("city");
    3                 var allNodes=cityEle.childNodes;
    4                 for(var i=0;i<allNodes.length;i++){
    5                     if(allNodes[i].nodeType==1){
    6                         alert(allNodes[i].innerHTML);
    7                     }
    8                 }
    9             });

      6.返回id为phone的节点的第一个子节点

    1        myQuery("btn06",function(){
    2                 var phoneEle=document.getElementById("phone");
    3                 var currentNode=phone.firstChild;
    4                 while(currentNode.nodeType!=1){
    5                     currentNode=currentNode.nextSibling;
    6                 }
    7                 alert(currentNode.innerHTML);
    8             });

      7.返回id为bj的节点的父节点

    1        myQuery("btn07",function(){
    2                 var bjEle=document.getElementById("bj");
    3                 var parNode=bjEle.parentNode;
    4                 alert(parNode.innerHTML);
    5             });

      8.返回id为android的节点的前一个兄弟节点

    1        myQuery("btn08",function(){
    2                 var andrEle=document.getElementById("android");
    3                 var preNode=andrEle.previousSibling;
    4                 while(preNode.nodeType!=1){
    5                     preNode=preNode.previousSibling;
    6                 }
    7                 alert(preNode.innerHTML);
    8             });

      9.读取id为username的节点的value属性值

    1        myQuery("btn09",function(){
    2                 var userEle=document.getElementById("username");
    3                 alert(userEle.value);
    4             });

      10.设置id为username的节点的value属性值

    1        myQuery("btn10",function(){
    2                 var userEle=document.getElementById("username");
    3                 //userEle.setAttribute("value","邹梦洁");
    4                 userEle.value="邹梦洁";
    5                 alert(userEle.value); 
    6             });

    4、练习2

                                       

      封装按钮单击事件按钮函数:

    1    function myClick(btnStr,func){
    2         var btn=document.getElementById(btnStr);
    3         btn.onclick=func;
    4     };

      功能实现:

     1 window.onload = function() {
     2         var items=document.getElementsByName("items");
     3         var checkedAllBox=document.getElementById("checkedAllBox");
     4         //①全选按钮checkedAllBtn:点击后所有爱好都选中
     5         myClick("checkedAllBtn",function(){
     6             checkedAllBox.checked=true;
     7             for(var i=0;i<items.length;i++){
     8                 items[i].checked=true;
     9             }
    10         });
    11         
    12         //②全不选按钮checkedNoBtn:点击后所有爱好都不选中
    13         myClick("checkedNoBtn",function(){
    14             checkedAllBox.checked=false;
    15             for(var i=0;i<items.length;i++){
    16                 items[i].checked=false;
    17             }
    18         });
    19         
    20         //③反选按钮checkedRevBtn:点击后所有爱好选中状态反转
    21         myClick("checkedRevBtn",function(){
    22             for(var i=0;i<items.length;i++){
    23                 items[i].checked=!items[i].checked;
    24             }
    25             var isAllChecked=true;
    26             for(var j=0;j<items.length;j++){
    27                 if(!items[j].checked){
    28                     isAllChecked=false;
    29                 }
    30             }
    31             checkedAllBox.checked=isAllChecked;
    32         });
    33         
    34         //④提交按钮sendBtn:点击后依次弹出选中内容
    35         myClick("sendBtn",function(){
    36             for(var i=0;i<items.length;i++){
    37                 if(items[i].checked){
    38                     alert(items[i].value);
    39                 }
    40             }
    41         });
    42         
    43         //⑤复选框全选、全不选
    44         checkall.onclick=function(){
    45             for(var i=0;i<items.length;i++){
    46                 items[i].checked=this.checked;   //this表示此函数当前对象
    47             }
    48         };
    49         
    50         //⑥全选、全不选复选框根据爱好选择改变状态
    51         for(var i=0;i<items.length;i++){
    52             items[i].onclick=function(){
    53                 var isAllChecked=true;
    54                 for(var j=0;j<items.length;j++){
    55                     if(!items[j].checked){
    56                         isAllChecked=false;
    57                     }
    58                 }
    59                 checkedAllBox.checked=isAllChecked;
    60             };
    61         }
    62             
    63     };

     三、DOM增删改

    方法 描述
    createElement("元素名") 创建元素节点 
    createAttribute("属性名") 创建属性节点
    createTextNode("文本") 创建文本节点
    appendChild(新节点) 把新的子节点添加到指定节点,通过父节点添加
    insertBefore(新节点,指定节点) 在指定的子节点前面插入新的子节点,通过父节点插入
    removeChild(指定节点) 删除子节点,通过父节点删除
    replaceChild(新节点,被替换节点) 替换子节点,通过父节点替换
    getAttribute(“属性名”) 返回指定的属性值
    setAttribute(“属性名”,“属性值”) 把指定属性设置或修改为指定的值

      1、练习1

        页面:

                                        

      封装为按钮添加单击事件的方法

    1        function myClick(btnStr,func){
    2                 var btn=document.getElementById(btnStr);
    3                 btn.onclick=func;
    4             };

      功能实现:

     1         window.onload = function() {
     2                 //①创建一个"广州"节点,添加到#city下
     3                 myClick("btn01",function(){
     4                     var cityEle=document.getElementById("city");
     5                     var gzNode=document.createElement("li");
     6                     var textNode=document.createTextNode("广州");
     7                     gzNode.appendChild(textNode);
     8                     cityEle.appendChild(gzNode);
     9                 });
    10                 
    11                 //②将"广州"节点插入到#bj前面
    12                 myClick("btn02",function(){
    13                     var bjEle=document.getElementById("bj");
    14                     var gzNode=document.createElement("li");
    15                     var textNode=document.createTextNode("广州");
    16                     gzNode.appendChild(textNode);
    17                     bjEle.parentNode.insertBefore(gzNode,bjEle);
    18                 });
    19                 
    20                 //③使用"广州"节点替换#bj节点
    21                 myClick("btn03",function(){
    22                     var bjEle=document.getElementById("bj");
    23                     var gzNode=document.createElement("li");
    24                     var textNode=document.createTextNode("广州");
    25                     gzNode.appendChild(textNode);
    26                     bjEle.parentNode.replaceChild(gzNode,bjEle);
    27                 });
    28                 
    29                 //④删除#bj节点
    30                 myClick("btn04",function(){
    31                     //自杀
    32                     /* var bjEle=document.getElementById("bj");
    33                     bjEle.parentNode.removeChild(bjEle); */
    34                     //他杀
    35                     var cityEle=document.getElementById("city");
    36                     cityEle.removeChild(bjEle);
    37                     
    38                 });
    39                 
    40                 //⑤读取#city内的HTML代码
    41                 myClick("btn05",function(){
    42                     var cityEle=document.getElementById("city");
    43                     alert(cityEle.innerHTML);
    44                 });
    45                 
    46                 //⑥设置#bj内的HTML代码
    47                 myClick("btn06",function(){
    48                     var bjEle=document.getElementById("bj");
    49                     //bjEle.innerHTML="北京欢迎你"; 
    50                     bjEle.firstChild.nodeValue="北京欢迎你";
    51                 });
    52                 
    53             };                

       2、练习2

        页面:

                                   

      封装为<a>标签添加删除操作的方法:

     1    function adelete(){
     2         var trEle=this.parentNode.parentNode;  //找到要删除的行
     3         var firstTd=trEle.getElementsByTagName("td")[0];  //找到行的第一个单元格
     4         var name=firstTd.innerHTML;    //获取文本内容
     5         var flag=confirm("你确定要删除"+name+"吗?");  //confirm带有布尔类型的返回值
     6         if(flag){
     7             var table=trEle.parentNode;    //找到要删除行的父节点
     8             table.removeChild(trEle);
     9         }
    10         return false;     //a标签onclick事件返回false,取消<a>的默认行为
    11     };

      删除、添加功能

     1   window.onload = function(){
     2         //删除
     3         var as=document.getElementsByTagName("a");
     4         for(var i=0;i<as.length;i++){
     5             as[i].onclick=adelete;
     6         }
     7         
     8         //添加
     9         var btn=document.getElementById("addEmpButton");
    10         btn.onclick=function(){
    11             //获取name,email,salary对象
    12             var name=document.getElementById("empName").value;
    13             var email=document.getElementById("email").value;
    14             var salary=document.getElementById("salary").value;
    15             
    16             //创建1个tr节点
    17             var newtr=document.createElement("tr");
    18             
    19             //创建4个td节点
    20             var nametd=document.createElement("td");
    21             var emailtd=document.createElement("td");
    22             var salarytd=document.createElement("td");
    23             var deletetd=document.createElement("td");
    24 
    25             //创建4个文本节点
    26             var nameText=document.createTextNode(name);
    27             var emailText=document.createTextNode(email);
    28             var salaryText=document.createTextNode(salary);
    29             var deleteText=document.createTextNode("delete");
    30             
    31             //创建1个a标签,并添加文本
    32             var aEle=document.createElement("a");
    33             aEle.appendChild(deleteText);
    34             aEle.href="#";
    35             aEle.onclick=adelete;
    36             
    37             //将文本节点添加到td节点中
    38             nametd.appendChild(nameText);
    39             emailtd.appendChild(emailText);
    40             salarytd.appendChild(salaryText);
    41             deletetd.appendChild(aEle);
    42             
    43             //将td节点添加到tr中
    44             newtr.appendChild(nametd);
    45             newtr.appendChild(emailtd);
    46             newtr.appendChild(salarytd);
    47             newtr.appendChild(deletetd);
    48             
    49             //获取table节点,并将tr节点添加到table中
    50             var table=document.getElementById("employeeTable");
    51             table.appendChild(newtr);
    52         };
    53         
    54     };
  • 相关阅读:
    转载
    转载
    HDU
    HDU
    Hdu
    转载
    HDU
    UVa
    HDU
    POJ
  • 原文地址:https://www.cnblogs.com/java-zmj/p/7803902.html
Copyright © 2011-2022 走看看