JS中DOM文档对象模型操作实例

一、DOM 

DOM,全称Document Object Model文档对象模型。 JS中通过DOM来对HTML文档进行操作。只要理解了DOM就可以随 心所欲的操作WEB页面。

Document 文档

文档表示的就是整个的HTML网页文档

Object对象

对象表示将网页中的每一个部分都转换为了一个对象。

Model模型

使用模型来表示对象之间的关系,这样方便我们获取对象。

节点

节点Node,是构成我们网页的最基本的组成部分,网页中的每一个部分都可以称为是一个节点。 比如:html标签、属性、文本、注释、整个文档等都是一个节点。虽然都是节点,但是实际上他们的具体类型是不同的。比如:标签我们称为元素节点、属性称为属性节点、文本称为文本节点、文档称为文档节点。节点的类型不同,属性和方法也都不尽相同。

常用节点分为四类

文档节点:整个HTML文档

元素节点HTML文档中的HTML标签

属性节点:元素的属性

文本节点HTML标签中的文本内容

节点的属性

二、文档节点(document)

• 文档节点document,代表的是整个HTML文 档,网页中的所有节点都是它的子节点。 document对象作为window对象的属性存在 的,我们不用获取可以直接使用。 通过该对象我们可以在整个文档访问内查找节点对象,并可以通过该对象创建各种节点对象。

三、元素节点(Element)

• HTML中的各种标签都是元素节点,这也是我们最常用的一个节点。浏览器会将页面中所有的标签都转换为一个元素节点,

我们可以通过document的方法来获取元素节点。比如:

 document.getElementById()  // 根据id属性值获取一个元素节点对象。

1)获取元素节点

通过document对象调用

1. getElementById()                  – 通过id属性获取一个元素节点对象

2. getElementsByTagName()    – 通过标签名获取一组元素节点对象

3. getElementsByName()          – 通过name属性获取一组元素节点对象

2)获取元素节点的子节点

• 通过具体的元素节点调用

1. getElementsByTagName()  方法,返回当前节点的指定标签名后代节点

2. childNodes   属性,表示当前节点的所有子节点

3. firstChild      属性,表示当前节点的第一个子节点

4. lastChild      属性,表示当前节点的最后一个子节点

3)获取父节点和兄弟节点

通过具体的节点调用

1. parentNode           属性,表示当前节点的父节点

2. previousSibling     属性,表示当前节点的前一个兄弟节点

3. nextSibling            属性,表示当前节点的后一个兄弟节点

4)元素节点的属性

获取,元素对象.属性名

例:element.value

      element.id

      element.className

设置,元素对象.属性名=新的值

例:element.value = “hello”

       element.id = “id01”

       element.className = “newClass”

5)其他属性

nodeValue

– 文本节点可以通过nodeValue属性获取和设置文本节点的内容

innerHTML

– 元素节点通过该属性获取和设置标签内部的html代码

四、文本节点(Text)

• 文本节点表示的是HTML标签以外的文本内容,任意非HTML的文本都是文本节点。它包括可以字面解释的纯文本内容。 • 文本节点一般是作为元素节点的子节点存在的。获取文本节点时,一般先要获取元素节点。在通过元素节点获取文本节点。

例如:

– 元素节点.firstChild; – 获取元素节点的第一个子节点,一般为文本节点

五、属性节点(Attr)

• 属性节点表示的是标签中的一个一个的属 性,这里要注意的是属性节点并非是元素节点的子节点,而是元素节点的一部分。

可以通过元素节点来获取指定的属性节点。例如:

– 元素节点.getAttributeNode("属性名");  // 注意:我们一般不使用属性节点。

六、事件

• 事件,就是文档或浏览器窗口中发生的一 些特定的交互瞬间。 JavaScript 与 HTML 之间的交互是通过事件实现的。对于 Web 应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、按下键盘上某个键,等等。

 

如图所示,对如下的网页添加右侧的相关属性,依次通过添加JS代码实现。为了更好的讲述JS对DOM的操作,将HTML和JS分离讲述。 

上述实现对应的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>
		<link rel="stylesheet" type="text/css" href="style/css.css" />
	</head>
	<body>
		<div id="total">
			<div class="inner">
				<p>
					你喜欢哪个城市?
				</p>

				<ul id="city">
					<li id="bj">北京</li>
					<li>上海</li>
					<li>东京</li>
					<li>首尔</li>
				</ul>

				<br>
				<br>

				<p>
					你喜欢哪款单机游戏?
				</p>

				<ul id="game">
					<li id="rl">红警</li>
					<li>实况</li>
					<li>极品飞车</li>
					<li>魔兽</li>
				</ul>

				<br />
				<br />

				<p>
					你手机的操作系统是?
				</p>

				<ul id="phone"><li>IOS</li><li id="android">Android</li><li>Windows Phone</li></ul>
			</div>

			<div class="inner">
				gender:
				<input class="hello" type="radio" name="gender" value="male"/>
				Male
				<input class="hello" type="radio" name="gender" value="female"/>
				Female
				<br>
				<br>
				name:
				<input type="text" name="name" id="username" value="abcde"/>
			</div>
		</div>
		<div id="btnList">
			<div><button id="btn01">1.查找#bj节点</button></div>
			<div><button id="btn02">2.查找所有li节点</button></div>
			<div><button id="btn03">3.查找name=gender的所有节点</button></div>
			<div><button id="btn04">4.查找#city下所有li节点</button></div>
			<div><button id="btn05">5.返回#city的所有子节点</button></div>
			<div><button id="btn06">6.返回#phone的第一个子节点</button></div>
			<div><button id="btn07">7.返回#bj的父节点</button></div>
			<div><button id="btn08">8.返回#android的前一个兄弟节点</button></div>
			<div><button id="btn09">9.返回#username的value属性值</button></div>
			<div><button id="btn10">10.设置#username的value属性值</button></div>
			<div><button id="btn11">11.返回#bj的文本值</button></div>
		</div>
	</body>
</html>

现在分别实现1-11功能

1.查找id为bj的节点,点击id为btn01的按钮时弹出其内的html元素

 innerHTML 通过这个属性可以获取到元素内部的html代码
    

		//将下述JS代码插入head标签中
       <script type="text/javascript">		
			window.onload = function(){
				//onload方法表示文档加载完成后进行调用JS
				//为id为btn01的按钮绑定一个单击响应函数
				var btn01 = document.getElementById("btn01");//找到button按钮
				btn01.onclick = function(){
					//查找#bj节点
					var bj = document.getElementById("bj");//找到北京所在列表项
					//打印bj
					//innerHTML 通过这个属性可以获取到元素内部的html代码
					alert(bj.innerHTML);
				};
			};					
		</script>

2.查找所有li节点, 点击id为btn02的按钮时弹出其内的html元素

 

    <script type="text/javascript"> 				
                window.onload=function(){
                var btn02=document.getElementById("btn02");
 				btn02.onclick=function(){
 					var lis=document.getElementsByTagName('li');
					//查找所有li节点
					//getElementsByTagName()可以根据标签名来获取一组元素节点对象
					//这个方法会给我们返回一个类数组对象,所有查询到的元素都会封装到对象中
					//即使查询到的元素只有一个,也会封装到数组中返回
 					for(var i=0;i<lis.length;i++)
 					{
 						alert(lis[i].innerHTML);
 					};
 				};

			};
	</script>

3.为id为btn03的按钮绑定一个单击响应函数

		<script type="text/javascript"> 	
                window.onload=function(){	
		        var btn03=document.getElementById('btn03');
 				btn03.onclick=function(){
 					var list=document.getElementsByName('gender');
 					for(var i=0;i<list.length;i++)
 					{
 						alert(list[i].className);
 					};
						/*
						 * innerHTML用于获取元素内部的HTML代码的
						 * 	对于自结束标签,这个属性没有意义
						 */
						//alert(inputs[i].innerHTML);
						/*
						 * 如果需要读取元素节点属性,
						 * 	直接使用 元素.属性名
						 * 		例子:元素.id 元素.name 元素.value
						 * 		注意:class属性不能采用这种方式,
						 * 			读取class属性时需要使用 元素.className
						 */
 				};

			};
		</script>

4.查找#city下所有li节点

 

		<script type="text/javascript">
			//4.查找#city下所有li节点
            //注意将代码写在head中时要写此行
			window.onload=function()
			{
			var btn04=document.getElementById("btn04");
			btn04.onclick=function (){
				var city=document.getElementById("city");
				var lis=city.getElementsByTagName("li");
				alert(lis.length);
			};
		};

		</script>

 5.返回#city的所有子节点

 childNodes属性会获取包括文本节点在呢的所有节点,根据DOM标签标签间空白也会当成文本节点,注意:在IE8及以下的浏览器中,不会将空白文本当成子节点,所以该属性在IE8中会返回4个子元素而其他浏览器是9个

	<script type="text/javascript">				
                //为id为btn05的按钮绑定一个单击响应函数
                window.onload=function(){
				var btn05 = document.getElementById("btn05");
				btn05.onclick = function(){
					//获取id为city的节点
					var city = document.getElementById("city");
					//返回#city的所有子节点
					/*
					 * childNodes属性会获取包括文本节点在呢的所有节点
					 * 根据DOM标签标签间空白也会当成文本节点
					 * 注意:在IE8及以下的浏览器中,不会将空白文本当成子节点,
					 * 	所以该属性在IE8中会返回4个子元素而其他浏览器是9个
					 */
					var cns = city.childNodes;
					
					//alert(cns.length);
					
					/*for(var i=0 ; i<cns.length ; i++){
						alert(cns[i]);
					}*/
					
					/*
					 * children属性可以获取当前元素的所有子元素
					 */
					var cns2 = city.children;
					alert(cns2.length);
				};

		</script>

6.返回#phone的第一个子节点

以下简写代码,将其添加<script> window.οnlοad=function(){/*代码写入*/}<script>

firstChild可以获取到当前元素的第一个子节点(包括空白文本节点) 

			var btn06=document.getElementById("btn06");
			btn06.onclick=function(){
				var phone=document.getElementById("phone");
			    var firstchild=phone.firstChild;
			    alert(firstchild);
			}

7返回#bj的父节点

 parentNode 属性,表示当前节点的父节点

			var btn07=document.getElementById("btn07");
			btn07.onclick=function(){
				var bj=document.getElementById("bj");
			    var parent=bj.parentNode;
			    alert(parent);
			};

8.返回#android的前一个兄弟节点

从这个部分开始,为button按钮获取元素节点设置为myClick函数,button按钮的Id值将通过一个参数传入myClick中,onclick时间通过函数作为第二个形参传入。myClick(idstr,fun)定义如下:

			function myClick(idStr,fun){
				var btn=document.getElementById(idStr);
				btn.onclick=fun;//将函数作为参数传进来
			}
			myClick("btn08",function(){
				var android=document.getElementById("android");
				var brother=android.previousSibling;
				alert(brother);
			});

 9.返回#username的value属性值

		    myClick("btn09",function(){
		    	var username=document.getElementById("username");
		    	alert(username.value);
		    })

 10.设置#username的value属性值

		   myClick("btn10",function(){
		   	var setvalue=document.getElementById("username");
		   	username.value="weng yu shang";
		   	alert(username.value);
		   })

 11.返回#bj第一个文本值

		   myClick("btn11",function(){
		   	var bj=document.getElementById("bj");
/*		   	var text=bj.firstChild;
		   	alert(text.nodeValue);*/
		   	alert(bj.firstChild.nodeValue);
		   })

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月的一天

你的鼓励将是我前进的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值