JavaScript-XML DOM

XML DOM节点的遍历

XML DOM通过childNodes来获取所有子节点,此方法获取的节点包含空白文本节点。需要进行判断过滤。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM 遍历</title>
</head>
<h1>XML DOM 遍历</h1>
<body>
    <ul id="uid">
        <li>张三</li>
        <li>李四</li>
        <li>王二</li>
        <li>麻子</li>
       
    </ul>
    
</body>
<script>
    //获取ul中的所有li节点
    var mList = document.getElementById("uid").getElementsByTagName("li");
    console.log("节点数量"+mList.length);//节点数量4
    //通过子节点获取
    var children = document.getElementById("uid").childNodes;
    console.log("节点数量"+children.length);//节点数量9(由于存在空白文本节点)
    //节点的遍历
    for(var i = 0 ;i<children.length;i++){
        //判断是否是元素节点
        if(children[i].nodeType == 1){
            // console.log(children[i].nodeType);
            console.log(children[i].innerHTML);//HTML DOM获取内容
            console.log(children[i].firstChild.nodeValue);//XML DOM获取内容
        }
    }

</script>
</html>

XML DOM节点的删除

要点:

  1. 获取所有要删除的节点。
  2. XML DOM中删除要使用其父节点下的removeChild(删除对象)方法,(可以通过parentNode获取其父节点)。
  3. 删除多个时注意循环中的元素数量变化,指示数须自减1。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM节点的删除</title>
    <style>
        ul{list-style:none;}
        ul li{line-height:30px;background-color:#ddd;margin-top:2px;}
        ul li:hover{background-color:#fc0;}
        ul li.cc{background-color:#f0c;}
    </style>
</head>
<body>
    <h1>XML DOM节点的删除</h1>
    <ul id="uid">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <button onclick="doDel()">删除</button>
</body>
<script>
   //获取所有ul中的li节点并绑定点击事件
   var list = document.getElementsByTagName("li");
   for(var i=0; i<list.length; i++){
       list[i].onclick = function(){
           this.setAttribute("class","cc");
       }
   }

   //执行节点删除函数
   function doDel(){
       var list2 = document.getElementsByTagName("li");
       //遍历
       for(var i=0; i<list2.length; i++){
           //判断当前li是否有class属性值为cc的
           if(list2[i].getAttribute("class")=="cc"){
               //执行删除
               list2[i].parentNode.removeChild(list2[i]);
               //避免多选删除时列表长度变更导致的漏删
               i--;
           }
       }
   }
</script>
</html>

XML DOM节点属性操作

当向元素标签中添加非HTML属性时,HTML DOM 将不再支持,此时XML DOM的特点就体现出来。可以通过setAttribute(“属性类型”,“属性值”)。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript中的XML DOM</title>
</head>
<body>
    <h1>XML-DOM:改变节点的属性</h1>
    <a id="aid" href="http://www.baidu.com">百度</a>
</body>
<script>
    //获取上面超链接a元素节点
    var a = document.getElementById("aid");
    //通过已知的HTML DOM操作a节点属性
    console.log(a.href);
    a.title="百度网址";
    //a.aa = "bb"; //添加aa属性值为bb 无效的

    //使用XML DOM操作节点a的属性
    console.log(a.getAttribute("href"));
    a.setAttribute("aa","bb"); //通过XML DOM可以添加任何属性和值
</script>
</html>

XML DOM节点的创建

  1. 创建一个新节点中的文本节点。
  2. 创建一个新节的元素节点。
  3. 将文本节点通过父节点的appendChild()方法向后添加。
  4. 获取原节点列表的父节点,将创建好的元素节点再次通过appendChild()方法添加到其子节点的末尾。
  5. 若要向前添加,则使用insertBefore(“新元素”,“目标位置元素”)则新元素添加到目标位置元素之前。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM节点的创建</title>
    <style>
        ul{list-style:none;}
        ul li{line-height:30px;background-color:#ddd;margin-top:2px;width:100px;}
    </style>
</head>
<body>
    <h1>XML DOM节点的创建</h1>
    <ul id="uid">
        <li>张三</li>
        <li>李四</li>
        <li>王二</li>
        <li>麻子</li>
    </ul>
    名称:<input id="nid" type="text" size="10" name="name"/>
    <button onclick="doAdd()">添加</button>
</body>
<script>
    function doAdd(){
        //获取输入框中的信息
        var name = document.getElementById("nid").value;
        //获取ul元素节点对象
        var ul = document.getElementById("uid");
        //创建一个文本节点
        var tt = document.createTextNode(name);
        //创建一个元素节点
        var li = document.createElement("li"); //<li></li>
        //将文件节点添加到li元素节点中
        li.appendChild(tt);
        //将li节点添加到ul中
        //ul.appendChild(li); //后追加
        ul.insertBefore(li,ul.firstChild); //前插入
    }
</script>
</html>

XML DOM节点的克隆

XML DOM中每个节点是一个对象,通过appendChild()方法将一个对象添加到另一个节点中时,原节点中的对象会消失。所以如果想要添加的同时对原节点中的对象进行保留。要用到.cloneNode() 方法。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM节点的克隆</title>
    <style>
        #did{width:400px;height:300px;border:1px solid blue;}
        img{width:80px;border:2px solid #fff;margin:2px;}
        img:hover{border:2px solid red;}
    </style>
</head>
<body>
    <h1>XML DOM节点的克隆</h1>
    <div id="did"></div>
    <div id="mid">
        <img src="./images/1.jpg"/>
        <img src="./images/2.jpg"/>
        <img src="./images/3.jpg"/>
        <img src="./images/4.jpg"/>
    </div>
    <h4>双击图片可实现图片的添加</h4>
</body>
<script>
    //获取mid中的所有图片节点
    var list = document.getElementById("mid").getElementsByTagName("img");
    //遍历添加鼠标双击事件
    for(var i=0; i<list.length; i++){
        list[i].ondblclick = function(){
            //获取did节点
            var did = document.getElementById("did");
            //将当前图片节点克隆一份添加到did元素节点中
            did.appendChild(this.cloneNode());
        }
    }
</script>
</html>

XML DOM节点的替换

replaceChild(新节点,被替换节点)将当前节点替换目标节点中的第一个子节点。
替换时如要保留替换节点,需要对替换节点进行克隆。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM节点的替换</title>
    <style>
        #did{width:400px;border:1px solid blue;}
        #did img{width:400px;}
        #mid img{width:80px;border:2px solid #fff;margin:2px;}
        #mid img:hover{border:2px solid red;}
    </style>
</head>
<body>
    <h1>XML DOM节点的替换</h1>
    <div id="did"><img src="./images/11.jpg"/></div>
    <div id="mid">
        <img src="./images/1.jpg"/>
        <img src="./images/2.jpg"/>
        <img src="./images/3.jpg"/>
        <img src="./images/4.jpg"/>
    </div>
    <h4>双击图片可实现图片的替换</h4>
</body>
<script>
    //获取id属性值为did的节点对象
    var did = document.getElementById("did");
    //获取id属性值为mid节点中的所有图片img元素节点
    var list = document.getElementById("mid").getElementsByTagName("img");
    //遍历图片节点,并绑定鼠标双击事件
    for(var i=0; i<list.length; i++){
        list[i].ondblclick = function(){
            did.replaceChild(this.cloneNode(),did.firstChild); //子节点替换
        }
    }
</script>
</html>

XML DOM操作select选项

  1. 获取下拉框中的所有元素。
  2. 遍历下拉框中所有元素,找到被选中的元素。
  3. 取消其选中属性
  4. 获取目标下拉框的节点。
  5. 通过appendChild()方法在目标下拉框中添加选中元素。
  6. 对于多选操作,要防止数组长度变动导致的漏操作,指示数自减。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM操作select选项</title>
    <style>
        select{width:100px;height:200px;border:1px solid #ddd;float:left;}
        div{width:100px;height:200px;float:left;text-align:center;padding-top:50px;}
    </style>
</head>
<body>
    <h1>XML DOM操作select选项</h1>
    <select id="sid1" size="10" multiple>
        <option value="0">周杰伦</option>
        <option value="1">林俊杰</option>
        <option value="2">黄家驹</option>
        <option value="3">Allen Walker</option>
        <option value="4">迈克尔.杰克逊</option>
       
    </select>
    <div>
        <button onclick="doMove('sid1','sid2')">>></button>
        <br/><br/><br/><br/>
        <button onclick="doMove('sid2','sid1')"><<</button>
    </div>
    <select id="sid2" size="10" multiple></select>
</body>
<script>
   function doMove(d1,d2){
       //获取对应的下拉框节点对象
       var select1 = document.getElementById(d1);
       var select2 = document.getElementById(d2);
       //获取第一个下拉框中的所有option下拉项节点对象
       var list = select1.getElementsByTagName("option");
       //遍历并判断是否选中
       for(var i=0; i<list.length; i++){
           if(list[i].selected){
               list[i].selected = false;
               select2.appendChild(list[i]); //使用XML DOM移动下拉项
               i--;
           }
       }
   }
</script>
</html>

XML DOM操作table表格

删除:获取删除对象的父节点(一层或多层),通过父节点对象调用removeChild(“删除的对象”)方法.
添加

  1. 获取表单信息。
  2. 将表单信息存入变量/数组中。
  3. 通过循环的方式创建一个或多个文本节点。
  4. 创建一个或多个元素节点。
  5. 将文本节点通过appenChild()嵌套入元素节点中。
  6. 直接通过.innerHTML=" "添加删除按钮。
  7. 重置表单中信息。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XML DOM操作table表格</title>
    <style>
        select,option,div,button{margin:0px;padding:0px;}
        #lid,#rid,div{
            width:80px;
            height:260px;
            float:left;
        }
        div{
            text-align:center;
            padding-top:60px;
        }
    </style>
</head>
<body>
    <h1>XML DOM操作table表格</h1>
    <table id="tid" width="500" border="1">
        <thead>
            <tr>
                <th>学号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1001</td>
                <td>张三</td>
                <td></td>
                <td>20</td>
                <td><button onclick="dodel(this)">删除</button></td>
            </tr>
            <tr>
                <td>1002</td>
                <td>李四</td>
                <td></td>
                <td>21</td>
                <td><button onclick="dodel(this)">删除</button></td>
            </tr>
            <tr>
                <td>1003</td>
                <td>王五</td>
                <td></td>
                <td>22</td>
                <td><button onclick="dodel(this)">删除</button></td>
            </tr>
        </tbody>
    </table>
    <br/><br/><br/>
    <h2>添加学生信息</h2>
    <form action="#" name="myform" onsubmit="return doAdd()">
        学号:<input type="text" name="sno"/><br/><br/>
        姓名:<input type="text" name="name"/><br/><br/>
        性别:<input type="text" name="sex"/><br/><br/>
        年龄:<input type="text" name="age"/><br/><br/>
        <input type="submit" value="添加"/>
    </form>
</body>
<script>
   //执行数据删除操作
   function dodel(bt){
      bt.parentNode.parentNode.parentNode.removeChild(bt.parentNode.parentNode);
   }
   
   function doAdd(){
       //获取表单信息
       var data = new Array();
       data[0] = document.myform.sno.value;
       data[1] = document.myform.name.value;
       data[2] = document.myform.sex.value;
       data[3] = document.myform.age.value;
       //获取tbody元素节点对象
       var tbody = document.getElementById("tid").getElementsByTagName("tbody")[0];
       //创建一个元素节点tr
       var tr = document.createElement("tr");
       //遍历数据并创建td节点
       for(var i=0; i<data.length; i++){
           var td = document.createElement("td");
           var text = document.createTextNode(data[i]);
           td.appendChild(text);
           tr.appendChild(td);
       }
       //添加删除按钮
       var td = document.createElement("td");
       td.innerHTML = '<button οnclick="dodel(this)">删除</button>';
       tr.appendChild(td);
       //将行节点tr放置到tbody中
       tbody.appendChild(tr);

       //清空表单
       document.myform.reset();

       return false;
   }
</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值