JavaScript---网络编程(7)-Dom模型(节点间的层次关系,节点的增、删、改)-1

简介: JavaScript---网络编程(7)-Dom模型(节点间的层次关系,节点的增、删、改)

利用节点间的层次关系获取节点:

上一节讲了3中获取的方式:

* ※※一、绝对获取,获取元素的3种方式:—Element

* 1、getElementById(): 通过标签中的id属性值获来取该标签对象

* 2、getElementsByName(): 通过标签中的name属性值来获取该标签对象集合

* 3、getElementsByTagName(): 通过标签名来获取该标签对象集合


现在来看看相对获取的方式:

※※二、相对获取(利用节点之间的层次关系),获取节点:—Node

1、父节点:parentNode–属性

2、子节点:childNodes–集合

3、上一个兄弟节点:previousSibling–属性

4、下一个兄弟节点:nextSibling–属性

5、使用以上属性时,要小心空白符节点(#Text)的存在。对于表格,还要注意有一个隐含的父节点。

*/


演示代码:

<html>
<head>
<title>Dom模型演示3---利用节点间的层次关系获取节点</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
    /*
     * ※※一、绝对获取,获取元素的3种方式:---Element
     * 1、getElementById(): 通过标签中的id属性值获来取该标签对象
     * 2、getElementsByName(): 通过标签中的name属性值来获取该标签对象集合
     * 3、getElementsByTagName(): 通过标签名来获取该标签对象集合
       ※※二、相对获取(利用节点之间的层次关系),获取节点:---Node
       1、父节点:parentNode--属性
       2、子节点:childNodes--集合
       3、上一个兄弟节点:previousSibling--属性
       4、下一个兄弟节点:nextSibling--属性
       5、使用以上属性时,要小心空白符节点(#Text)的存在。对于表格,还要注意<tr>有一个隐含的父节点<tbody>。
     */
    //通过节点间的层次关系来获取节点
    function getNodeByLevel() {
        var tabNode = document.getElementById("table1");
        //获取父节点
        var node = tabNode.parentNode;
        //alert(node.nodeName);//BODY,如果是IE6则是:TBODY
        //alert( tabNode.parentNode.parentNode.nodeName);//HTML
        //获取子节点
        /*
           使用childNodes时,需注意几点:
           1,<table>标签下还隐藏一个<tbody>标签,<tbody>下面才是<tr>
           2,空白符(空格或换行符)是被看成是一个文本节点的。例如,如果<table>和<tr>之间有换行或空格,则<table>的第一个孩子节点nodeName是:#text
           3, 上面的<tbody>和#text节点是兄弟关系
         */
        //需求:显示出表格中的所有姓名
        var children = tabNode.childNodes;
        //alert(children[0].nodeName);//#text
        //alert(children[1].nodeName);//<tbody>
        var trNodes = children[1].childNodes;
        alert(trNodes.length);
        var str="";
        for(var x=0;x<trNodes.length;x++){
            //用卫条件把<tr>与<td>之间的空白符过滤掉
            if(trNodes[x].nodeType==3){
                continue;
            }
            //注意,trNodes[x].childNodes[0]是空白符即#text节点,trNodes[x].childNodes[1]才是<td>节点
            //str=str+trNodes[x].childNodes[1].innerText+" ";
            //上面是偷懒写法,如果想写得兼容性好些,应该还用for循环遍历strNodes[x]的所有孩子节点且过滤掉#text节点,获取第一个非空白子节点的innerText
            for(var i=0;i<trNodes[x].childNodes.length;i++){
                if(trNodes[x].childNodes[i].nodeType==3){
                    continue;
                }
                str=str+trNodes[x].childNodes[i].innerText+" ";
                break;
            }
        }
        alert(str);
        //获取兄弟节点
        //上一个
        var node  = tabNode.previousSibling;
        alert(node.nodeName);//#text
        node = node.previousSibling;
        alert(node.nodeName);//BR
        //下一个
        var node = tabNode.nextSibling;
        alert(node.nodeName);//#text
        node = node.nextSibling;
        alert(node.nodeName);//HR
    }
</script>
</head>
<body>
    <div id="divId1">div区域1中的文字</div>
    <br/>
    <table id="table1">
        <tr>
            <td>Jack</td>
            <td>20</td>
        </tr>
        <tr>
            <td>张三</td>
            <td>23</td>
        </tr>
        <tr>
            <td>李四</td>
            <td>22</td>
        </tr>
        <tr>
            <td>罗斯</td>
            <td>22</td>
        </tr>
    </table>
    <hr />
    <input type="button" value="获取元素" onclick="getNodeByLevel()" />
</body>
</html>


部分演示结果:

image.png

节点的增、删、改操作–查有6种,在前面已经讲过

演示代码:

<html>
    <head>
        <title>Dom模型演示4---节点的增、删、改操作--查有6种,在前面已经讲过</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
            div{
                border: #0000ff solid 1px;
                width: 200px;
                padding: 30px;/*内补丁*/
                margin: 10px;/*外补丁*/
            }
            #div1{  background-color:#00ccff;   }/*设置或检索对象的背景颜色。*/
            #div2{  background-color:#ffccff;   }
            #div3{  background-color:#ffff00;   }
            #div4{  background-color:#00cc00;   }
        </style>
    </head>
    <body>
        <div id="div1"> </div>
        <div id="div2"> div区域2中的文字 </div>
        <div id="div3"> div区域3中的文字 </div>
        <div id="div4"> div区域4中的文字 </div>
        <hr/>
        <input type="button" value="添加一个文本节点" onclick="creataAndadd1()" >
        <input type="button" value="添加一个按钮节点" onclick="creataAndadd2()" >
        <input type="button" value="第三种添加方式" onclick="creataAndadd3()" >
        <br/>
        <input type="button" value="删除节点" onclick="delNode()" />
        <br/>
        <input type="button" value="移动替换节点" onclick="updateNode1()" />
        <input type="button" value="克隆替换节点" onclick="updateNode2()" />
        <script type="text/javascript">
            //添加一个文本节点
            function creataAndadd1(){
                //createTextNode 从指定值中创建文本字符串。 
                //创建一个文本节点
                var oTextNode = document.createTextNode("新添加的文本内容");
                //获取div1节点
                var oDivNode1 = document.getElementById("div1");
                //让div1节点把oTextNode节点添加为孩子
                oDivNode1.appendChild(oTextNode);
                //appendChild 给对象追加一个子元素。 
            }
            //添加一个按钮节点---基于对象,dom
            function creataAndadd2(){
                //创建一个按钮节点
                var oBtnNode = document.createElement("input");
                //createElement 为指定标签创建一个元素的实例。 
                oBtnNode.type="button";
                oBtnNode.value="一个按钮";
                //获取div1节点
                var oDivNode1 = document.getElementById("div1");
                //让div1节点把oBtnNode节点添加为孩子
                oDivNode1.appendChild(oBtnNode);
            }
            //第3种添加节点的方式---html的方式
            function creataAndadd3(){
                //获取div1节点
                var oDivNode1 = document.getElementById("div1");
                //innerHTML 设置或获取位于对象起始和结束标签内的 HTML。 
                //添加文本节点
                oDivNode1.innerHTML = "湖南城院";//只赋一个
                //oDivNode1.innerHTML +="湖南城院";//追加
                //继续添加按钮
                //oDivNode1.innerHTML = "<input type='button' value='按钮a'/> ";
                oDivNode1.innerHTML += "<input type='button' value='按钮a'/> ";
                //继续添加链接
                oDivNode1.innerHTML += "<a href='http://www.baidu.com'/>百度一下</a>";
            }
            //删除节点
            function delNode(){
                //获取div2节点
                var oDivNode2 = document.getElementById("div2");
                //oDivNode2.removeNode();//只删当前节点-removeNode 从文档层次中删除对象。
                //360-8.1浏览器中无效-IE支持
                //oDivNode2.removeNode(true);//删当前节点及子节点--子树-
                //360-8.1浏览器中无效-IE支持
                //※removeNode()方法不建议使用,因为这种删除不彻底!---建议使用父节点来删除
                //因为-自己删除自己,怎么可能删除干净嘛
                oDivNode2.parentNode.removeChild(oDivNode2);//都支持
                //removeChild 从元素上删除子结点。 
            }
            //修改节点1---移动替换
            function updateNode1(){
                var oDivNode1 = document.getElementById("div1");
                var oDivNode3 = document.getElementById("div3");
                //oDivNode1.replaceNode(oDivNode3);//自己替换,
                //不建议-360-8.1浏览器中无效-IE支持
                //replaceNode 用其它元素替换对象。 
                oDivNode1.parentNode.replaceChild(oDivNode3,oDivNode1);
                //replaceChild 用新的子元素替换已有的子元素。 
            }
            //修改节点2---克隆替换
            function updateNode2(){
                var oDivNode1 = document.getElementById("div1");
                var oDivNode3 = document.getElementById("div3");
                //var oDivNode3Clone = oDivNode3.cloneNode();//不包含子节点的克隆
                //cloneNode 从文档层次中复制对对象的引用。 
                var oDivNode3Clone = oDivNode3.cloneNode(true);//包含子节点的克隆
                oDivNode1.parentNode.replaceChild(oDivNode3Clone, oDivNode1);               
            }
        </script>
    </body>
</html>
目录
相关文章
|
30天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
110 3
|
1月前
|
监控 安全 BI
什么是零信任模型?如何实施以保证网络安全?
随着数字化转型,网络边界不断变化,组织需采用新的安全方法。零信任基于“永不信任,永远验证”原则,强调无论内外部,任何用户、设备或网络都不可信任。该模型包括微分段、多因素身份验证、单点登录、最小特权原则、持续监控和审核用户活动、监控设备等核心准则,以实现强大的网络安全态势。
136 2
|
19天前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
154 2
|
2月前
|
运维 网络协议 算法
7 层 OSI 参考模型:详解网络通信的层次结构
7 层 OSI 参考模型:详解网络通信的层次结构
461 1
|
3月前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
195 4
网络协议与IO模型
|
3月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
132 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
3月前
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。