其他分享
首页 > 其他分享> > DOM

DOM

作者:互联网

  全称Document Object Model,即文档对象模型。

  DOM描绘了一个层次化的树,允许开发人员添加、删除、修改页面的某一部分。

  浏览器在解析HTML页面标记的时候,是将HTML页面中的每一个标记按照顺序在内存中组建一颗DOM树,组建好之后,按照树的结构将页面显示在浏览器的窗口中。

节点层次

  HTML网页是可以看做是一个树状的结构,如下:

html
     |-- head
     |     |-- title
     |     |-- meta
     |     ...
     |-- body
     |     |-- div
     |     |-- form
     |     |     |-- input
     |     |     |-- textarea
     ...   ...   ...

  这是一颗树,是由多个节点(Node)组成的,节点的类型有很多种。

  节点最多有一个父节点,可以有多个子节点。

HTML DOM 定义了访问和操作HTML文档的标准方法。

document

代表当前页面的整个文档树。

  访问属性

  all

  images

  links

1.document入门

  该对象代表整个文档页面

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <img src="" alt="这是图片" />
        <img src="" alt="这是图片" />
        <img src="" alt="这是图片" />
        
        <input type="button" value="设置图片" onclick="setImg()" />
        
        <a href="#">百度1</a>
        <a href="#">百度2</a>
        <a href="#">百度3</a>
        
        <input type="button" value="设置a标签" onclick="setA()" />
    </body>
    
    <script>
        /*
        DOM(Document Object Model) 文档对象模型
                
        一个html页面被浏览器加载的时候,浏览器就会对整个html页面上的所有标签都会创建一个对应的
        对象进行描述,我在浏览器上看到的信息只不过就是这些html对象的属性信息而已。我们只要能找到
        应的对象操作对象的属性,则可以改变浏览器当前显示的内容。      
        */
        
        //获取当前页面所有标签对象
        var allNodes = document.all;
        
        for(var i= 0;i<allNodes.length;i++){
            //document.write(allNodes[i]+"---");
            //nodeName:节点名称
            document.write(allNodes[i].nodeName+"---");
        }
        
        function setImg(){
            var allImgNodes = document.images;
            
            for(var i= 0;i<allImgNodes.length;i++){
                allImgNodes[i].src="img/2.jpg";
                allImgNodes[i].width = 200;
                allImgNodes[i].height = 200;
            }
        }
        
        function setA(){
            var aNodes = document.links;
            
            for(var i= 0;i<aNodes.length;i++){
                aNodes[i].href="http://www.baidu.com";
            }
        }
        
    </script>
</html>

2.根据html标签的属性找节点

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    
        用户名:<input type="text" id="username" />
        <input type="button" value="设置用户名" onclick="setUserName()" />
        <hr>
        
        <img src="" alt="这是图片1" />
        <img src="" alt="这是图片2" class="imgs" />
        <img src="" alt="这是图片3" class="imgs" />
        <input type="button" value="设置图片" onclick="setImgs()" />
        <hr>
        
        <div>div1</div>
        <div>div2</div>
        <div>div3</div>
        <input type="button" value="设置div" onclick="setDivs()" />
        <hr>
        
        <span name="span">span1</span>
        <span name="span">span2</span>
        <span name="span">span3</span>
        <input type="button" value="设置span" onclick="setSpans()" />
        <hr>
    
    </body>
    
    <script>
        /*
        通过html元素的标签属性找节点。
            document.getElementById("html元素的id属性值") 
            document.getElementsByTagName("标签名") 
            document.getElementsByName("html元素的name属性值")
            document.getElementsByClassName("html元素的class属性值")
        */
    
        function setUserName(){
            //通过id属性获取标签对象
            var usernameNode = document.getElementById("username");
            usernameNode.value="jack";
        }
        
        function setImgs(){
            //通过class属性获取标签对象(返回的是一个数组)
            var imgNodes= document.getElementsByClassName("imgs");
            
            for(var i= 0;i<imgNodes.length;i++){
                imgNodes[i].src="img/2.jpg";
                imgNodes[i].width = 200;
                imgNodes[i].height = 200;
            }
        }
        
        function setDivs(){
            //通过标签名获取标签对象(返回的是一个数组)
            var divNodes= document.getElementsByTagName("div");
            
            for(var i= 0;i<divNodes.length;i++){
                divNodes[i].innerHTML = "div标签".fontcolor("red");
            }
        }
        
        function setSpans(){
            //通过name属性获取标签对象(返回的是一个数组)
            var spanNodes= document.getElementsByName("span");
            
            for(var i= 0;i<spanNodes.length;i++){
                spanNodes[i].innerHTML = "span标签".fontcolor("red");
            }
        }
        
        
    </script>
</html>

3.根据属性找标签练习

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>
        <script type="text/javascript">
            function checkAll() {
                //找到所有的的选项
                var items = document.getElementsByName("item");
                //找到全选按钮的对象
                var allNode = document.getElementsByName("all")[0];
                for (var i = 0; i < items.length; i++) {
                    items[i].checked = allNode.checked;
                }
            }

            function getSum() {
                var items = document.getElementsByName("item");
                var sum = 0;
                for (var i = 0; i < items.length; i++) {
                    if (items[i].checked) {
                        sum += parseInt(items[i].value);
                    }
                }

                var spanNode = document.getElementById("sumid");
                spanNode.innerHTML = ("&nbsp;&nbsp;&nbsp;&yen;" + sum).fontcolor("green");
            }
        </script>
    </head>

    <body>
        <div>商品列表</div>
        <input type="checkbox" name="item" value="3000" />笔记本
电脑3000元<br />
        <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />
        <input type="checkbox" name="item" value="3000" />笔记本
电脑3000元<br />
        <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />
        <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />
        <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />
        <input type="checkbox" name="all" onclick="checkAll()" />全/不选<br />
        <input type="button" value="总金额:" onclick="getSum()" />
        <span id="sumid"></span>
    </body>

</html>

4.通过节点关系找标签

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>
    </head>

    <body>
        <input type="text" id="userName" />
    </body>

    <script type="text/javascript">
        /*
            通过关系(父子关系、兄弟关系)找标签。
                parentNode    获取当前元素的父节点。
                childNodes    获取当前元素的所有下一级子元素。
                firstChild    获取当前节点的第一个子节点。
                lastChild      获取当前节点的最后一个子节点。
        ------------------------------------------------------------    
                nextSibling        获取当前节点的下一个节点。(获取当前节点相邻的下一个平级节点)
                previousSibling    获取当前节点的上一个节点。(获取当前节点相邻的上一个平级节点)
                
        我们可以通过标签的类型进行判断筛选:
            
            文本节点的类型: 3
            注释的节点类型: 8
            标签节点的类型: 1
        */

        var bodyNode = document.getElementsByTagName("body")[0];
        //查看父节点
        var parentNode = bodyNode.parentNode;
        document.write("父节点的名称:" + parentNode.nodeName);
        document.write("<br />");

        //找子节点:childNodes 获取所有的子节点,返回的是一个数 组。 注意: 获取子节点的时 候是包括了空文本或者是注释。
        var children = bodyNode.childNodes;
        //document.write(children.length);
        for (var i = 0; i < children.length; i++) {
            //if(children[i].nodeType==1){
            document.write("节点的名字:" + children[i].nodeName + " 对象的类型:" + children[i].nodeType + "---");
            //}
        }
        document.write("<br />");
        document.write("第一个子节点:" + bodyNode.firstChild.nodeName);
        document.write("最后一个子节点:" + bodyNode.lastChild.nodeName);
        document.write("<br />");

        //找兄弟节点
        var inputNode = document.getElementById("userName");
        document.write("下个兄弟节点:" + inputNode.nextSibling.nodeName);
        document.write("上一个兄弟节点:" + inputNode.previousSibling.nodeName);
    </script>

</html>

5.创建节点,插入节点

  每个节点都包含的信息的,这些属性是:

  nodeType   节点类型

  nodeName   节点名称

  nodeValue  节点值

元素类型 节点类型

  元素   1   就是标签元素,例<div>..</div>

  文本   3   标签元素中的文本

  注释   8    表示为注释

nodeName

  nodeName 属性含有某个节点的名称。

--------------------------------

  元素节点的 nodeName 是标签名称

  属性节点的 nodeName 是属性名称

  文本节点的 nodeName 永远是 #text

  文档节点的 nodeName 永远是 #document

nodeValue

  对于文本节点,nodeValue 属性是所包含的文本。

  对于属性节点,nodeValue 属性是属性值。

  对于注释节点,nodeValue 属性注释内容。

  nodeValue 属性对于文档节点和元素节点是不可用的。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>
        <script type="text/javascript">
            /*
             创建节点、设置节点的属性。
             
                document.createElement("标签名")        创建新元素节点
                elt.setAttribute("属性名", "属性值")    设置属性
                elt.appendChild(e)        添加元素到elt中最后的位置
            */

            var num = 1;

            function add() {
                var inputNode = document.createElement("input"); //创建一个指定标签名字的节点。

                //setAttribute:设置节点的属性
                inputNode.setAttribute("type", "button");
                inputNode.setAttribute("value", "按钮" + num);
                num++;

                var bodyNode = document.getElementsByTagName("body")[0];
                bodyNode.appendChild(inputNode); //appendChild 添加子节点。
            }
        </script>
    </head>

    <body>
        <input type="button" onclick="add()" value="添加" />
    </body>

</html>

6.添加附件

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>

        <script type="text/javascript">
            /*
                插入目标元素的位置     
                elt.insertBefore(newNode, childNode);            添加到elt中,childNode之前。
                注意: elt必须是childNode的直接父节点。
                    
                删除指定的子节点    
                elt.removeChild(child)                            
                注意: elt必须是child的直接父节点。
                
            */
            
            //添加附件
            function addFile() {
                //获取表格节点对象
                var table = document.getElementsByTagName("table")[0];
                //创建tr标签节点对象
                var trnode = document.createElement("tr");
                trnode.innerHTML = "<td><input type='file'/></td><td><a href='#' onclick='del(this)'>删除附件</a></td>";
                /*    var    tdnode1=document.createElement("td");
                    var    tdnode2=document.createElement("td");
                    tdnode1.innerHTML="<input type='file'/>";
                    tdnode2.innerHTML="<a href='#'>删除附件</a>";    
                    trnode.appendChild(tdnode1);
                    trnode.appendChild(tdnode2);*/
                //table.appendChild(trnode);
                
                //获取父节点对象
                var tbody = document.getElementsByTagName("tbody")[0];
                //获取要插入的子节点
                var lastrow = document.getElementById("lastrow");
                //添加数据
                tbody.insertBefore(trnode, lastrow);
            }

            //删除附件
            function del(delfile) {
                //获取父节点对象
                var tbody = document.getElementsByTagName("tbody")[0];
                //获取要删除的tr标签节点对象
                var del = delfile.parentNode.parentNode;
                //删除数据
                tbody.removeChild(del);
            }
        </script>
    </head>

    <body>
        <table>
            <tbody>
                <tr>
                    <td><input type="file" /></td>
                    <td><a href="#" onclick="del(this)">删除附件</a></td>
                </tr>

                <tr id="lastrow">
                    <td colspan="2"><input onclick="addFile()" type="button" value="添加附件" /></td>
                </tr>
            </tbody>
        </table>
    </body>

</html>

7.城市联动框

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title></title>
        <script type="text/javascript">
            function showCity() {
                //维护一个二维数组存储省份对应的城市
                var citys = [[],["洛阳", "郑州", "三门峡"],["青岛", "日照", "烟台"],["广州", "汕头"]];
                //获取省份对应的节点
                var provinceNodes = document.getElementById("province");
                //获取省份选中的选项
                var index = provinceNodes.selectedIndex;
                //获取对应的城市
                var datas = citys[index];
                //找到city节点
                var citynode = document.getElementById("city");
                //先清空city框所有option
                var citychild = citynode.childNodes;
                for (var i = 0; i < citychild.length;) {
                    citynode.removeChild(citychild[i]);
                }
                //设置options的个数。
                //citynode.options.length = 1;
                //遍历对应的所有城市然后创建对应的option添加到city上。
                for (var i = 0; i < datas.length; i++) {
                    var op = document.createElement("option");
                    op.innerHTML = datas[i];
                    citynode.appendChild(op);
                }
            }
        </script>
    </head>

    <body>
        省份<select id="province" onchange="showCity()">
            <option>省份</option>
            <option>河南</option>
            <option>山东</option>
            <option>广东</option>
        </select> 城市
        <select id="city">
        <option>城市</option>
    </select>
    </body>
</html>

8.正则验证From表单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">

    //检查用户名
    function checkName(){
        var inputNode = document.getElementById("userName");
        var spanNode = document.getElementById("userId");
        //获取输入框的内容
        var content  = inputNode.value;
        //用户名的规则: 六位的英文与数字组成。数字不能开头
        var reg = /^[a-z][a-z0-9]{5}$/i;    
        if(reg.test(content)){
            //符合规则
            spanNode.innerHTML = "正确".fontcolor("green");
            
            return true;
        }else{
            //不符合规则
            spanNode.innerHTML = "错误".fontcolor("red");
            
            return false;
        }    
    }


    //检查邮箱
    function checkEmail(){
        var email = document.getElementById("email").value;
        var spanNode = document.getElementById("emailspan");
        
        //编写邮箱的正则       13456@qq.com  13456@qq.net  13456@qq.com.cn
        var reg = /^[a-z0-9]\w+@[a-z0-9]+(\.[a-z]{2,3}){1,2}$/i; 
        if(reg.test(email)){
            //符合规则
            spanNode.innerHTML = "正确".fontcolor("green");
            return true;
        }else{
            //不符合规则
            spanNode.innerHTML = "错误".fontcolor("red");
            
            return false;
        }    
    }
    
    function checkAll(){
        var userName = checkName();    
        var email = checkEmail();
        if(userName&&email){
            return true;
        }else{
        
            return false;
        }
    }
    
/*
 表单提交的时候是会触发onsubmit事件的,如果onsubmit事件的方法返回是true,那么该表单允许提交,如果返回的是false,该表单不允许提交。

*/
</script>

<meta http-equiv="Content-Type" content="text/html; 
charset=utf-8" />
<title>正则表达式</title>
</head>
<body>                                
<form action="success.html" method="get" onsubmit="return checkAll()" > <!--如果表单提交时候触发的方法返回是false,那么该表单
不允许提交,如果返回的是true允许提交 -->
            <table border="1px" width="50%" align="center" 
cellspacing="0px" cellpadding="3px">
                <tr>
                    <td width="25%">姓名:</td>
                    <td>
                        <input type="text" name="userName" id="userName" onblur="checkName()"/>
                        <span id="userId"></span>
                    </td>
                </tr>
                <tr>
                    <td >密码:</td><td>
                        <input type="password"  name="pwd" id="pwd" onblur="checkPass()"/>
                        <span id="passId"></span>
                    </td>
                </tr>
                <tr>
                    <td>确认密码:</td><td>
                <input type="password" name="ensurepwd" id="ensurepwd" onblur="ensurepass()" />                        <span id="ensure"></span>
                    </td>
                </tr>
                <tr>
                    <td>邮箱</td><td>
                        <input type="text" name="email" id="email" 
onblur="checkEmail()"/>
                        <span id="emailspan"></span>
                        
                    </td>
                </tr>
                <tr>
                    <td>性别</td><td>
                        <input type="radio" checked="ture" name="gender" id="male" value="male"/>
                    男
                        <input type="radio" name="gender" value="female"/>
                    女</td>
                </tr>
                <tr>
                    <td>爱好:</td><td>
                        <input type="checkbox"  name="like" />
                    eat
                        <input type="checkbox" name="like" />
                    sleep
                        <input type="checkbox" name="like"/>
                    play  
                    <span id="hobbySpan"></span>
                    </td>
                </tr>
                <tr>
                    <td>城市</td><td>
                    <select name="city" id="city">
                        <option value=""> 请选择</option>
                        <option value="bj"> 北京 </option>
                        <option value="gz"> 广州 </option>
                        <option value="sh"> 上海 </option>
                    </select>
                    
                    </td>
                </tr>
                <tr>
                    <td>自我介绍</td><td>                    <textarea cols="15" rows="5"  name="myInfo" id="myInfo"></textarea></td>
                </tr>
                <tr align="center">
                    <td colspan="2"><!--提交按钮-->
                    <input type="submit"/>
                    </td>
                </tr>
            </table>
        </form>
</body>

</html>

Success.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
    <h1><font color="#FF0000">恭喜你 ,提交数据成功</font></h1>
</body>
</html>

正则表达式

位置:

  ^   开头

  $   结尾

次数:

  *   0或多个

  +   1或多个

  ?   0或1个

  {n}  就是n个

  {n,} 至少n个

  {n,m} 最少n个,最多m个

通配符:

  \d   任意数字

  \D   任意非数字

  \s   任意空白

  \S   任意非空白

  .   任意字符(除'\n'外)

组合:

  [a-z]

  [0-9]

  (正则) 匹配括号中正则表达式对应的结果,并暂存这个结果。

  (?:正则) 匹配括号中正则表达式对应的结果,但不暂存这个结果。

  \数字 使用第n个组匹配的结果

  使用正则的工具(RegExp类与相关方法)

创建:

  // 方式一

var regex = new RegExp("正则表达式", "标志");

  // 方式二

var regex = /正则表达式/标志

 

标志:

  g (全文查找出现的所有 pattern)

  i (忽略大小写)

  m (多行查找)

方法:

  Regexp.test( str )

  String.replace( regex, str )

标签:nodeName,DOM,标签,var,document,节点,属性
来源: https://www.cnblogs.com/liuwenchuang/p/14743465.html