美文网首页
3.0 DOM基础加强

3.0 DOM基础加强

作者: 笑笑学生 | 来源:发表于2018-02-09 11:13 被阅读19次

DOM是什么?组成部分?

document object model 文档对象模型
是W3C组织制订的一套用于访问XML和HTML文档的标准.允许脚本动态地访问和更新文档的内容、结构和样式.

分类

  • DOM Core
  • XML DOM
  • HTML DOM

XML介绍

  • html它的主要作用是:显示
  • xml它的主要作用是:信息的存储和传送。

把html有嵌套层次关系的文档看做一个对象document

Node:节点

  • Document:代表整个文档
  • Element:代表一个标记(元素)
  • Text:标记中的文本
  • Attribute:代表一个属性。元素才有属性

XML DOM和HTML DOM

XML DOM 定义了访问和处理 XML 文档的标准方法
HTML文档格式 符合XML语法标准,所以可以使用XML DOM API

在XML DOM每个元素,都会被解析为一个节点Node。
HTML DOM 定义了针对HTML文档的对象,可以说是一套更加适用于JavaScript技术开发的API
HTML DOM是对XML DOM的扩展
进行JavaScript DOM开发,可以同时使用 XML DOM和 HTML DOM

xml:可扩展标记语言。相对HTML来讲的

  • HTML:<a>标签,代表着一个超链接,含义是固定的。说明HTML标记是有限的。
  • XML:<黑马>黑马不黑</黑马> 自定义标签,扩展性很强。

可不可以把HTML当做XML来看。

  • XML DOM方式解析HTML,还能解析XML.
  • HTML DOM方式解析HTML。

练习

  • 先用XML DOM解析HTML(很麻烦)
  • 再用HTML DOM解析HTML(很简单)

如果把HTML当做XML对待,不会忽略回车空格和制表符。

DOM的基本属性

常用方法:

getElementById()返回对拥有指定 id 的第一个对象的引用,在html中,每个标签要有唯一的id。对于id的管理浏览器处理不严格的。
getElementsByName()返回带有指定名称的对象集合
getElementsByTagName()返回带有指定标签名的对象集合

实例1:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Document.html</title>
<script type="text/javascript">
    window.onload = function(){
        var i1Obj = document.getElementById("i1");
        alert(i1Obj.value);
        
        var ps = document.getElementsByName("password");    //数组
        for(var i=0;i<ps.length;i++){
            alert(ps[i].value);
        }
        
        var inputObjs = document.getElementsByTagName("input");
        for(var i=0;i<inputObjs.length;i++){
            alert(inputObjs[i].value);
        }
    }
</script>
</head>
<body>
    <input type="text" id="i1" name="password"><br/>
    <input type="text" id="i2" name="password"><br/>
</body>
</html>

DOM 节点常用属性:

nodeName

  • 如果节点是元素节点,nodeName返回这个元素的名称
  • 如果是属性节点,nodeName返回这个属性的名称
  • 如果是文本节点,nodeName返回一个内容为#text 的字符串

nodeType

  • Node.ELEMENT_NODE ---1 -- 元素节点
  • Node.ATTRIBUTE_NODE ---2 -- 属性节点
  • Node.TEXT_NODE ---3 -- 文本节点

nodeValue

  • 如果给定节点是一个属性节点,返回值是这个属性的值
  • 如果给定节点是一个文本节点,返回值是这个文本节点内容
  • 如果给定节点是一个元素节点,返回值是 null

实例2:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Node</title>
<script type="text/javascript">
    //XML DOM
    window.onload=function(){
        var divObj = document.getElementById("d1");
        //打印元素节点的三个属性
        //alert("nodeName="+divObj.nodeName+";nodeType="+divObj.nodeType+";nodeValue="+divObj.nodeValue);
        
        //打印属性的三个属性:如何得到属性节点
        var styleNode = divObj.getAttributeNode("style");// XML DOM方式获得元素中的属性节点 (属性节点的nodeValue取值老的IE有问题)
        //alert("nodeName="+styleNode.nodeName+";nodeType="+styleNode.nodeType+";nodeValue="+styleNode.nodeValue);
        
        var textNode = divObj.firstChild;
        alert("nodeName="+textNode.nodeName+";nodeType="+textNode.nodeType+";nodeValue="+textNode.nodeValue);
    }
</script>
</head>
<body>
    <div id="d1" style="width: 500px;height: 200px;border: blue 1px solid;background-color: #c3f3c3;">黑马有点不黑</div>
</body>
</html>

实例3:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    window.onload = function(){
        var h1Obj = document.getElementById("h1");
        //alert(h1Obj.firstChild.nodeValue);
        
        //alert(h1Obj.innerHTML);   //innerHTML不是标准的。
        
        var nodes = h1Obj.childNodes;
        alert(nodes[0].nodeValue);
    }
</script>
</head>
<body>
    <h1 id="h1">黑马程序员</h1>
</body>
</html>

实例4:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //汉字内容打印
    window.onload = function(){
    /**
        //方式1:
        document.getElementById("bt1").onclick = function(){
            //根据标签名称获得所有li节点
            var lis = document.getElementsByTagName("li");
            //遍历li节点
            for(var i=0;i<lis.length;i++){
                //得到他们的所有的孩子节点
                var childs = lis[i].childNodes;
                //是文本节点,就把内容打印出来
                for(var j=0;j<childs.length;j++){
                    if(childs[j].nodeType == 3){
                        alert(childs[j].nodeValue);
                    }
                }
            }
        }
    **/
    
        //方式2:
        document.getElementById("bt1").onclick = function(){
            //alert("haha");
            var lis = document.getElementsByTagName("li");
            for(var i=0;i<lis.length;i++){
                treewalk(lis[i]);
            }
        }
        //递归
        function treewalk(node){
            if(node.nodeType == 3){
                alert(node.nodeValue);
            }else{
                //得到孩子节点
                var nodes = node.childNodes;    
                for(var i=0;i< nodes.length;i++){
                    treewalk(nodes[i]);
                }
            }
        }       
    }
</script>
</head>
<body>
    <ul>
        <li id="bj" value="beijing">
            北京
            <h1>海淀</h1>
            奥运
        </li>
        <li id="sh" value="shanghai">
            上海
        </li>
        <br/>
    </ul>
    <input type="button"  id="bt1" value="取值"/>
</body>
</html>

实例5:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //XML DOM
    window.onload = function(){
        document.getElementById("bt1").onclick = function(){
            var nodes = document.getElementById("edu").childNodes;
            alert(nodes.length);
            for(var i=0;i<nodes.length;i++){
                if(nodes[i].nodeType==1){
                    alert(nodes[i].firstChild.nodeValue);
                }
            }
        }
    }
</script>
</head>
<body>
    <select id="edu" name="edu">
        <option value="BS">博士</option>
        <option value="SS">硕士</option>
        <option value="BK">本科</option>
        <option value="ZK">专科</option>
        <option value="GZ">高中</option>
        <option value="CZ">初中</option>
        <option value="XX">小学</option>
        <option value="TJ">胎教</option>
    </select>
    <input type="button" id="bt1" value="取值"/>
</body>
</html>

实例6:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //XML DOM节点替换
    window.onload=function(){
        document.getElementById("name").onclick=function(){
            //点击时:牛骞被  打灰机 节点替换
            var nameNode = document.getElementById("name");
            var playNode = document.getElementById("play");
            
            //通过nameNode的父标签来操作替换
            nameNode.parentNode.replaceChild(playNode,nameNode);
        }
    }
</script>
</head>
<body>
    <ul>
        <li id="name">牛骞</li>
        <li>刘飞</li>
    </ul>
    <ul>
        <li id="play">
            打<p>灰机</p>
        </li>
        <li>吃西瓜</li>
    </ul>
</body>
</html>

实例7:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //添加一项:<option value="TJ">胎教</option>
    window.onload = function(){
        document.getElementById("bt1").onclick = function(){
            //创建option元素
            var optionE = document.createElement("option"); 
            //添加属性和文本字节点
            optionE.setAttribute("value","TJ");
            
            var textNode = document.createTextNode("胎教");
            optionE.appendChild(textNode);
            
            //得到id=edu节点,添加一个孩子节点
            document.getElementById("edu").appendChild(optionE);
        }
    }
</script>
</head>
<body>
    <select id="edu" name="edu">
        <option value="BS">博士</option>
        <option value="SS">硕士</option>
        <option value="BK">本科</option>
        <option value="ZK">专科</option>
        <option value="GZ">高中</option>
        <option value="CZ">初中</option>
        <option value="XX">小学</option>
    </select>
    <input type="button" id="bt1" value="添加"/>
</body>
</html>

实例8:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    window.onload=function(){
        document.getElementById("bt1").onclick=function(){
            //添加一行到表格的末尾
            
            /*
            <tr>
                <td>陈冠希</td>
                <td>cgx@itheima.com</td>
                <td>28</td>
                <td>
                    <input type="button" value="删除" onclick="del(this)"/>
                </td>
            </tr>
            */
            
            var nameValue = document.getElementById("name").value;
            var emailValue = document.getElementById("email").value;
            var ageValue = document.getElementById("age").value;
            
            //创建tr元素,依次创建td和文本
            var trNode = document.createElement("tr");  // <tr></tr>
            var tdNameNode = document.createElement("td");  // <td></td>        
            tdNameNode.appendChild(document.createTextNode(nameValue)); //<td>name</td>
            
            var tdEmailNode = document.createElement("td");
            tdEmailNode.appendChild(document.createTextNode(emailValue));
            
            var tdAgeNode = document.createElement("td");   
            tdAgeNode.appendChild(document.createTextNode(ageValue));   
            
            
            var inputNode = document.createElement("input");//<input/>
            //<input type="button" value="删除" onclick="del(this)"/>
            inputNode.setAttribute("type", "button");
            inputNode.setAttribute("value", "删除");
            inputNode.setAttribute("onclick", "del(this)");
            
            var tdOpNode = document.createElement("td");    
            tdOpNode.appendChild(inputNode);    
            
            //把td添加到tr上
            trNode.appendChild(tdNameNode);
            trNode.appendChild(tdEmailNode);
            trNode.appendChild(tdAgeNode);
            trNode.appendChild(tdOpNode);
            
            //把tr搞到table上
            //创建一个tbody,把tr搞到tbody,再把tbody搞到table上
            var tbodyNode = document.createElement("tbody");
            tbodyNode.appendChild(trNode);
            document.getElementById("t1").appendChild(tbodyNode);
        }
    }

    function del(obj){
        var trParent = obj.parentNode.parentNode.parentNode;
        trParent.removeChild(obj.parentNode.parentNode);
    }
</script>
</head>
<body>
    姓名:<input type="text" id="name" name="name"/>
    邮箱:<input type="text" id="email" name="email"/>
    年龄:<input type="text" id="age" name="age"/><br/>
    <input type="button" id="bt1" value="添加"/>
    <hr/>
    <table id="t1" border="1" width="438">
        <tr>
            <th>姓名</th>
            <th>邮箱</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
        <tr>
            <td>陈冠希</td>
            <td>cgx@itheima.com</td>
            <td>28</td>
            <td>
                <input type="button" value="删除" onclick="del(this)"/>
            </td>
        </tr>
    </table>
</body>
</html>

注意:
深入浅出tbody:
http://blog.csdn.net/seabreezesuper/article/details/62428321

实例9:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    window.onload=function(){
        //<input id="selectDeSelectAll" type="checkbox">全选/全不选<br/>
        document.getElementById("selectDeSelectAll").onclick=function(){
            var hobby = document.getElementsByName("hobby");
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=this.checked;
            }
        }
        document.getElementById("bt1").onclick=function(){
            var hobby = document.getElementsByName("hobby");
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=true;
            }
        }
        document.getElementById("bt2").onclick=function(){
            var hobby = document.getElementsByName("hobby");
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=false;
            }
        }
        document.getElementById("bt3").onclick=function(){
            var hobby = document.getElementsByName("hobby");
            for(var i=0;i<hobby.length;i++){
                hobby[i].checked=!hobby[i].checked;
            }
        }
    }
</script>
</head>
<body>
    <input id="selectDeSelectAll" type="checkbox">全选/全不选<br/>
    <input type="checkbox" name="hobby" value="eat"/>吃饭
    <input type="checkbox" name="hobby" value="sleep"/>睡觉
    <input type="checkbox" name="hobby" value="java"/>学Java
    <br/>
    <input type="button" id="bt1" value="全选"/>
    <input type="button" id="bt2" value="全不选"/>
    <input type="button" id="bt3" value="反选"/>
</body>
</html>

实例10:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    window.onload=function(){
        //<input type="button" id="toRight" value="-->"/><br/>
        
        document.getElementById("toRight").onclick=function(){
            //左边的到右边的
            //得到左侧的select中的option元素,被选中的,搞到右边去
            var leftSelectNode = document.getElementById("leftSelect");
            var nodes = leftSelectNode.childNodes;
            for(var i=0;i<nodes.length;i++){
                if(nodes[i].nodeType==1){
                
                    //getAttribute("selected")浏览器的兼容性问题
                    //if(nodes[i].getAttribute("selected"))
                    
                    if(nodes[i].selected){
                        document.getElementById("rightSelect").appendChild(nodes[i]);
                    }
                }
            }
        }
        
        //<input type="button" id="allToRight" value=">>"/><br/>
        document.getElementById("allToRight").onclick=function(){
            var leftSelectNode = document.getElementById("leftSelect");
            var nodes = leftSelectNode.childNodes;
            var nodesLength = nodes.length;
            for(var i=nodesLength-1;i>=0;i--){//JS中的数组是可变数组
                if(nodes[i].nodeType==1){
                    document.getElementById("rightSelect").appendChild(nodes[i]);
                }
            }
        }
        
        //<input type="button" id="toLeft" value="<--"/><br/>
        //<input type="button" id="allToRight" value="<<"/><br/>
    
    }
</script>
</head>
<body>
    <table width="438">
        <tr>
            <td>
                <select id="leftSelect" size="7">
                    <option value="BJ">北京</option>
                    <option value="SD">山东</option>
                    <option value="HB">湖北</option>
                    <option value="GD">广东</option>
                    <option value="SX">山西</option>
                    <option value="XJ">新疆</option>
                </select>
            </td>
            <td>
                <input type="button" id="toRight" value="-->"/><br/>
                <input type="button" id="allToRight" value=">>"/><br/>
                <input type="button" id="toLeft" value="<--"/><br/>
                <input type="button" id="allToRight" value="<<"/><br/>
            </td>
            <td>
                <select id="rightSelect" size="7">
                </select>
            </td>
        </tr>
    </table>
</body>
</html>

注意:
只有IE8可以获得nodes[i].getAttribute("selected")的值,建议改为:nodes[i].selected
http://www.flyne.org/article/420
https://www.cnblogs.com/snandy/archive/2011/09/01/2162088.html

实例11:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //HTML DOM
    //添加一项:<option value="TJ">胎教</option>
    window.onload=function(){
        document.getElementById("bt1").onclick=function(){
            var op = new Option("胎教","TJ");
            document.getElementById("edu").add(op);
        }
    }
</script>
</head>
<body>
    <select id="edu" name="edu">
        <option value="BS">博士</option>
        <option value="SS">硕士</option>
        <option value="BK">本科</option>
        <option value="ZK">专科</option>
        <option value="GZ">高中</option>
        <option value="CZ">初中</option>
        <option value="XX">小学</option>
    </select>
    <input type="button" id="bt1" value="添加"/>
</body>
</html>

实例12:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    window.onload=function(){
        document.getElementById("bt1").onclick=function(){
            
            var nameValue = document.getElementById("name").value;
            var emailValue = document.getElementById("email").value;
            var ageValue = document.getElementById("age").value;
            
            var rowsNum = document.getElementById("t1").rows.length;//表中的行数
            var newRow = document.getElementById("t1").insertRow(rowsNum);//插入的新行
            newRow.innerHTML="<td>"+nameValue+"</td><td>"+emailValue+"</td><td>"+ageValue+"</td><td><input type='button' value='删除' onclick='del(this)'/></td>";
        }
    }
    
    function del(obj){
        var trParent = obj.parentNode.parentNode.parentNode;
        trParent.removeChild(obj.parentNode.parentNode);
    }
</script>
</head>
<body>
    姓名:<input type="text" id="name" name="name"/>
    邮箱:<input type="text" id="email" name="email"/>
    年龄:<input type="text" id="age" name="age"/><br/>
    <input type="button" id="bt1" value="添加"/>
    <hr/>
    <table id="t1" border="1" width="438">
        <tr>
            <th>姓名</th>
            <th>邮箱</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
        <tr>
            <td>陈冠希</td>
            <td>cgx@itheima.com</td>
            <td>28</td>
            <td>
                <input type="button" value="删除" onclick="del(this)"/>
            </td>
        </tr>
    </table>
</body>
</html>

注意:
Eclipse技巧:
点击文件,右键,Compare With——Local history找到历史记录。

实例13:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
    //HTML DOM
    window.onload=function(){
        document.getElementById("toRight").onclick=function(){
            var leftSelectNode = document.getElementById("leftSelect");
            var index = leftSelectNode.selectedIndex;//当前选中的option的索引
            document.getElementById("rightSelect").add(leftSelectNode.options[index]);
        }
        document.getElementById("allToRight").onclick=function(){
            var leftSelectNode = document.getElementById("leftSelect");
            var options = leftSelectNode.options;//所有的选项
            var opLength = options.length;
            for(var i=0;i<opLength;i++){//控制次数
                document.getElementById("rightSelect").add(options[0]);
            }
        }

        //<input type="button" id="toLeft" value="<--"/><br/>
        //<input type="button" id="allToRight" value="<<"/><br/>        
    }
</script>
</head>
<body>
    <table width="438">
        <tr>
            <td>
                <select id="leftSelect" size="7">
                    <option value="BJ">北京</option>
                    <option value="SD">山东</option>
                    <option value="HB">湖北</option>
                    <option value="GD">广东</option>
                    <option value="SX">山西</option>
                    <option value="XJ">新疆</option>
                </select>
            </td>
            <td>
                <input type="button" id="toRight" value="-->"/><br/>
                <input type="button" id="allToRight" value=">>"/><br/>
                <input type="button" id="toLeft" value="<--"/><br/>
                <input type="button" id="allToRight" value="<<"/><br/>
            </td>
            <td>
                <select id="rightSelect" size="7">
                </select>
            </td>
        </tr>
    </table>
</body>
</html>

相关文章

  • 3.0 DOM基础加强

    DOM是什么?组成部分? document object model 文档对象模型是W3C组织制订的一套用于访问...

  • per-courseDOM介绍

    DOM 文档对象模型 D 表示文档,DOM的物质基础O 表示对象,DOM的思想基础M 表示模型,DOM的方法基础...

  • javascript基础系列:DOM相关的技术知识点

    javascript基础系列:DOM相关的技术知识点 DOM及其基础操作 DOM: document object...

  • 基础加强

    Junit单元测试: 反射:框架设计的灵魂 注解:

  • DOM基础

    DOM基础 第一章:DOM概述 1.1DOM以及节点概念 ​ 文档对象模型DOM(Document Object ...

  • 虚拟DOM

    虚拟DOM 基础概念: virtual DOM是对真实DOM的描述和映射 当Virtual DOM改变后,我们得到...

  • HTML DOM基础解析

    DOM基础知识 1. HTML DOM简介 DOM 是 Document Object Model(文档对象模型)...

  • LitePal3.0基础用法

    LitePal3.0基础用法

  • Dom基础1

    DOM基础 DOM简介、DOM标准、DOM节点 获取元素的子节点:childNodes、兼容性问题火狐不兼容,可以...

  • React基础篇之虚拟DOM

    Hello World JS创建虚拟DOM JSX创建虚拟DOM 虚拟DOM与真实DOM 下一篇:React基础篇...

网友评论

      本文标题:3.0 DOM基础加强

      本文链接:https://www.haomeiwen.com/subject/aljftftx.html