js加强,js操作dom详解

本文详细介绍了使用 JavaScript 对 DOM 进行操作的方法,包括节点属性的读取与修改、节点的增删改查等基本操作,并通过实例展示了如何实现地区联动选择的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

************本人水平有限,在学习时请用批判的态度学习,有问题给我留言************

Js 操作 dom

1 、文档里的每个节点都有属性 nodeName nodeValue nodeType

       nodeName  文本节点的的节点名是 #text , nodeName 是只读属性

nodeValue   1 元素节点 2 属性节点 3 文本节点    只读属性

nodeType   不能用于元素节点 返回 null

 

2 getElementsByTagName  返回一个节点集合

3 firstChild lastChild  第一个元素节点,最后一个元素节点

4 childNodes  返回所有子节点列表

5 previousSibling 前一个兄弟节点 nextSibling  后一个兄弟节点   parentNode 返回父节点

6 hasChildNodes  文本节点可以作为元素节点的子节点,文本节点和属性节点不可能再包含任何子节点

7 appendChild(node) 追加节点

8 removeChild() 移除一个节点

可以借用子节点的得到父节点,然后移除子节点。

9 replaceChild()  替换方法,有两个参数,把第一个参数的内容替换掉第二个参数的内容

如果两个都存在在 dom 中,第一个会出现在第二个的位置,而第二个将消失。

10 insertBefore(newnode,refnode)  refnode 之前插入 newnode

 

11 、创建节点

setAttribute() 为一个元素节点增加属性

createElement() 创建一个元素节点

createTextNode() 创建一个文本节点

用这三个方法可以添加任何节点。

12 innerHTML 内部的 html  既可以得到,也可以设置

 

这里有一个例子,联动选择地市,地市信息在 xml

 

13 、调用函数时

1

node.onclick = xxx(); 得到函数的返回值,也就是执行了该函数

2

node.onclick = function(){

    xxx();

}

得到了该函数的引用,只有触发该事件时才执行。

14 动态数组的删除 :即数组中的某个元素删除后后面的元素会自动向前一格。

[“ 山东 ”, “ 山西 ”, “ 广东 ”, “ 广西 ”, “ 四川 ”, “ 河南 ”, “ 河北 ”]

如果用 for(int i = 0 ;i<xx.length; i++) 会是

[“ 山西 ”, “ 广东 ”, “ 广西 ”, “ 四川 ”, “ 河南 ”, “ 河北 ”]

[“ 山西 ”, “ 广西 ”, “ 四川 ”, “ 河南 ”, “ 河北 ”]

[“ 山西 ”, “ 广西 ”, “ 河南 ”, “ 河北 ”]

[“ 山西 ”, “ 广西 ”, “ 河南 ”]

数组越界

结论:动态数组需要从后向前删除

For(int  i = xx.length ; i>0 ; i--)

 

记录一个联动选择的例子

选择一个省以后,会有相应的地市出现在另一个 select

City.html

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

<html>

       <head>

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

              <title>Untitled Document</title>

              <script type="text/javascript" src="cities.js"></script>

       </head>

       <body>

              <select id="province">

                     <option value=""> 请选择 ...</option>

                     <option value=" 河北省 "> 河北省 </option>

                     <option value=" 辽宁省 "> 辽宁省 </option>

                     <option value=" 山东省 "> 山东省 </option>

              </select>

             

              <select id="city"><option value="..."> 请选择 ...</option></select>

       </body>

</html>

 

cities.js

window.onload = function(){

 

       // 解析 XML 文档 , 得到 xml 文档的 china 根节点

       var xmlDocument = parseXml("cities.xml");

       var chinaNode = xmlDocument.childNodes[1];

      

       // id="province" select 节点添加 onchange 事件 , 获取选择的省的 value

       var provinceNode = document.getElementById("province");

       provinceNode.onchange = function(){

                            // ** 清空 provice 节点出 <option value="..."> 请选择 ...</option> 的所有子节点 **

                            var cityNode = document.getElementById("city");

                           

                              // cityNodeOptionNodes 数组时活动的 , 所以需要从后向前清

                              var cityNodeOptionNodes = cityNode.getElementsByTagName("option");

                              var length = cityNodeOptionNodes.length;

                              for(var i = length - 1; i > 0; i--){

                              cityNode.removeChild(cityNodeOptionNodes[i]);

                }

               

              var provinceValue = this.value;

             

              // provinceValue xml 文档中获取对应的 province 节点

              var provinceNodeInXmlFile = xmlDocument.selectSingleNode("china/province[@name='" + provinceValue + "']");

             

              // 获取 3 provinceNodeInXmlFile 的所有 city 子节点的文本值 : cityValue

              var cityNodesInXmlFile = provinceNodeInXmlFile.getElementsByTagName("city");

             

              for (var i = 0; i < cityNodesInXmlFile.length; i++) {

                     var cityNodeInXmlFile = cityNodesInXmlFile[i];

                     var cityValue = cityNodeInXmlFile.firstChild.nodeValue;

                    

                     // 利用 得到的文本值创建 option 节点 : <option value='cityValue'>cityValue</option>

                     var optionNode = document.createElement("option");

                     optionNode.setAttribute("value", cityValue);

                     var optionNodeTextNode = document.createTextNode(cityValue);

                     optionNode.appendChild(optionNodeTextNode);

                    

                     // 把创建好的 option 节点添加到 id="city" select 节点中

                     cityNode.appendChild(optionNode);

              }

       };

 

       // 解析 xml 文件的函数

       function parseXml(fileName){

              //IE 内核的浏览器

              if (window.ActiveXObject) {

                     // 创建 DOM 解析器

                     var doc = new ActiveXObject("Microsoft.XMLDOM");

                     doc.async = "false";

                     // 加载 XML 文档 , 获取 XML 文档对象

                     doc.load(fileName);

                     return doc;

              }

              //Mozilla 浏览器

              else

                     if (window.DOMParser) {

                            // 创建 DOM 解析器

                            var p = new DOMParser();

                            // 创建 DOM 解析器

                            return p.parseFromString(fileName, "text/xml");

                     }

                     else {

                            return false;

                     }

       }

}

 

 

cities.xml

 

<?xml version="1.0" encoding="GB2312"?>

<china>

       <province name=" 河北省 ">

              <city> 石家庄 </city>

              <city> 邯郸 </city>

              <city> 唐山 </city>

              <city> 张家口 </city>

              <city> 廊坊 </city>

       </province>

       <province name=" 辽宁省 ">

              <city> 沈阳 </city>

              <city> 大连 </city>

              <city> 鞍山 </city>

              <city> 抚顺 </city>

              <city> 铁岭 </city>

       </province>

       <province name=" 山东省 ">

              <city> 济南 </city>

              <city> 青岛 </city>

              <city> 威海 </city>

              <city> 烟台 </city>

              <city> 潍坊 </city>

       </province>

</china> 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值