`

javascript DOM(一)

 
阅读更多

DOM:Document Object Model(文本对象模型)

D: 文档---html文档或xml文档

O:对象---document对象的属性和方法

M:模型

DOM是针对xml(html)的基于树的API

DOM树:节点(node)的层次。

DOM把一个文档表示为一棵家谱树(父、子、兄弟)

DOM定义了Node的接口以及许多种节点类型来表示XML节点的多个方面。

 

1. 节点及其类型:

1). 元素节点

2). 属性节点

3). 文本节点

节点及其类型

节点(node):来源于网络理论,代表网络中的一个连接点。网络是由节点构成的集合。

<p title="a gentle reminder">Don't forget to buy this stuff.</p>

p是一个element node.元素节点。

title="a gentle reminder"是一个attribute node.属性节点

Don't forget to buy this stuff.是一个text node.文本节点

其中Don't forget to buy this stuff.是节点p的一个子节点。

 

2. 在html文档的什么位置编写js代码?

0). 直接在html页面中书写代码。

     缺点: js和Html耦合性太强,不利于维护。

1). 一般地,不能在body节点之前来直接获取body内的节点,因为此时html文档树还没有加载完成,获取不到指定的节点;除非它在某一个方法内部;这样的话,只有在调用方法的时候,才会去获取节点,这个时候一般文档树加载已经完成。

2). 可以在整个html文档的最后缩写类似代码,但是这不符合习惯。

3). 一般地,在body节点之前编写js代码,但是需要利用window.onload事件。该事件在当前文档完全加载之后被触发,所以其中的代码可以获取到文档的任何节点。

 

<script type="text/javascript">

window.onload=function(){

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

alert(cityNode);

}

</script>

 

4). 关于为onclick等属性赋值的问题:

 

 

在<script type="text/javascript"></script>内部给一个节点添加事件的方法。不需要()。例如:

<script type="text/javascript">

var button=document.getElementById("button");

button.onclick=alert("Hello, World");

</script>

这里就为button添加了一个点击事件。但是页面载入的时候会有一个alert窗口Hello,World,你再去点击button的时候不会有任何作用,这个原因是因为 button.onclick执行的是alert("Hello,World");的执行结果,但是alert并没有任何执行结果。

下一个例子:

<script type="text/javascript">

function helloworld(){

alert("Hello,World");

}

var button=document.getElementById("button");

button.onclick=helloworld;//这里会执行helloworld()方法,括号不要加。因为加括号之后,会直接执行helloworld()方法。所以不要加括号。

var test=helloworld;//方法的引用;

test();//这里会执行helloworld()方法体;

</script>

 

                ①. button.onclick = helloWorld();

错误的赋值方式, 以上代码将会导致 helloWorld 函数执行, 而赋给 onclick 属性的是函数的执行结果

②. button.onclick = helloWorld; 正确的赋值方式, 赋给 onclick 属性的是函数的引用

 

 

3. 如何来获取元素节点:(关于节点方法可以参考java API文档中的Node,Element等接口中的方法 ,在org.w3c.dom包中 )

1). document.getElementById: 根据 id 属性获取对应的单个节点

2). document.getElementsByTagName: 根据标签名获取指定节点名字的数组, 数组对象 length 属性可以获取数组的长度

3). document.getElementsByName: 根据节点的 name 属性获取符合条件的节点数组, 但 ie 的实现方式和 W3C 标准有差别: 在 html 文档中若某节点(li)没有 name 属性, 则 ie 使用 

   getElementsByName 不能获取到节点数组, 但火狐可以. 

4). 其它的两个方法getElementsByClassName,getElementsByTagNameNS, ie 根本就不支持, 所以不建议使用  

以下是代码:

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1. 获取 "北京" 对应的 li 节点
				
				//1). 
				var bj = document.getElementById("city");
				//alert(bj);
				
				//2). ie 和 火狐的实现方式不一样: 若节点本身没有 name 属性, ie 不能正常工作
				bj = document.getElementsByName("BeiJing");
				//alert(bj.length);
				
				var genders = document.getElementsByName("gender");
				//alert(genders.length);
				
				//3). 
				var uls = document.getElementsByTagName("ul");
				alert(uls.length);
			};
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</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>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	

 4. 获取属性节点:

 

1). 可以直接通过 cityNode.id 这样的方式来获取和设置属性节点的值

2). 通过元素节点的 getAttributeNode 方法来获取属性节点,然后在通过 nodeValue 来读写属性值 

代码:

 

 

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				var maleNode = document.getElementsByName("gender")[0];	
		
				//1. 获取属性节点的值
				alert(maleNode.type);
				
				//2. 设置节点的值,可以通过查看源码来确定节点的value值已经改变。
				maleNode.value = "male^^";
				
				
				//3. 先获取属性节点, 然后在来操作属性节点(麻烦一点的方法)
				/*
				var typeNode = maleNode.getAttributeNode("type");
				alert(typeNode.nodeValue);
				typeNode.nodeValue = "text";//设置节点类型值,设置节点类型,firefox支持,但是IE不支持。
				*/
			};
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</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>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	

 5. 获取元素节点的子节点(只有元素节点才有子节点!!):(元素节点即:<a><p><input><select><div>等等,属性节点id,type,name,value等等。)

1). childNodes 属性获取全部的子节点: 火狐 和 ie的实现方式有区别
2). firstChild 属性获取第一个子节点
3). lastChild 属性获取最后一个子节点
代码:

 

 

 

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1. 获取 #city 节点的所有的 li 子节点(获取全部的子节点: 火狐 和 ie的实现方式有区别)
				var cityNode = document.getElementById("city");
				var liNodes = cityNode.childNodes;
				alert(liNodes.length);
				
				//2. 获取 #city 节点的第一个子节点
				var first = cityNode.firstChild;
				alert(first);
				
				//3. 获取 #city 节点的最后一个子节点
				var last = cityNode.lastChild;
				alert(last);
			};
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</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>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>

 6. 节点的属性:

1). nodeName: 代表当前节点的名字. 只读属性. **如果给定节点是一个文本节点, nodeName 属性将返回内容为 #text 的字符串
2). nodeType:返回一个整数, 这个数值代表着给定节点的类型. 只读属性. 1 -- 元素节点, 2 -- 属性节点, 3 -- 文本节点
        3). nodeValue:返回给定节点的当前值(字符串). 可读写的属性
①. 元素节点, 返回值是 null.
②. 属性节点: 返回值是这个属性的值
③. 文本节点: 返回值是这个文本节点的内容
代码:

 

 

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1. 元素节点的属性
				var cityNode = document.getElementById("city");
				alert(cityNode.nodeName);
				alert(cityNode.nodeType);
				//元素节点的 nodeValue 属性返回 null
				alert(cityNode.nodeValue);
				
				//2. 属性节点的属性
				var idNode = cityNode.getAttributeNode("id");
				alert(idNode.nodeName);
				alert(idNode.nodeType);
				alert(idNode.nodeValue);
				
				
			};
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</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>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	

 7. 获取文本节点:

 

1). 步骤: 元素节点 --> 获取元素节点的子节点

2). 若元素节点只有文本节点一个子节点, 例如 <li id="bj" name="BeiJing">北京</li>, <p>你喜欢哪个城市?</p>, 可以先获取到指定的元素节点 eleNode,

   然后利用 eleNode.firstChild.nodeValue 的方法来读写其文本节点的值

代码:

 

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1. 获取 #bj 的文本节点
				var bjNode = document.getElementById("bj");
				var bjTextNode = bjNode.firstChild;//因为只有一个子节点,所以这里用firstChild和lastChild都一样,或者childNodes[0]
			
				//2. 获取文本节点的 3 个属性
				//alert(bjTextNode.nodeName);
				//alert(bjTextNode.nodeType);
				
				//获取文本节点的值
				alert(bjTextNode.nodeValue);
				
				//设置文本节点的值
				bjTextNode.nodeValue = "^^" + bjTextNode.nodeValue;
			};
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</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>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>	
 

 

0
1
分享到:
评论

相关推荐

    JavaScript dom操作 dom元素查询 示例代码

    JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码...

    经典之作javascript dom编程艺术源码

    JavaScript DOM编程艺术是一本深入解析DOM操作的经典书籍,它的源码提供了丰富的实例,帮助开发者深入理解如何使用原生JavaScript高效地操纵网页元素。DOM(Document Object Model)是HTML和XML文档的标准表示,它将...

    随书光盘+PDF JavaScript DOM编程艺术(第2版)-源代码2.5MB PDF114MB .zip

    JavaScript DOM编程艺术(第2版)是一本深受开发者欢迎的书籍,主要涵盖了JavaScript语言在Web前端开发中的应用,特别是关于DOM(Document Object Model)的深入理解和实践。这本书的随书光盘包含了源代码和PDF电子版...

    JavaScript DOM编程艺术.pdf

    JavaScript DOM编程艺术 --全

    JavaScript dom操作 删除元素 示例代码

    JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 ...

    javascriptDom编程艺术+源码

    《JavaScript DOM编程艺术》是一本深受开发者欢迎的JavaScript学习书籍,专注于DOM(Document Object Model)这一核心概念。DOM是Web页面的结构模型,通过JavaScript与DOM的交互,开发者可以实现对网页内容的动态...

    JavaScriptDOM编程艺术(第2版)PDF版本下载.txt

    JavaScriptDOM编程艺术(第2版)PDF版本下载

    javascript dom2 源码及pdf

    总的来说,JavaScript DOM2是Web开发中的关键工具,它让JavaScript成为了一种强大的客户端脚本语言,为网页带来了丰富的动态性和交互性。通过学习和实践,开发者可以提高网页的用户体验,创建出更加智能和灵活的Web...

    JavaScript dom操作 访问和修改元素 示例代码

    JavaScript dom操作 访问和修改元素 示例代码JavaScript dom操作 访问和修改元素 示例代码JavaScript dom操作 访问和修改元素 示例代码JavaScript dom操作 访问和修改元素 示例代码JavaScript dom操作 访问和修改...

    JavaScript dom操作 添加和替换元素 示例代码

    JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换...

    JavascriptDOM基本操作

    JavascriptDOM基本操作 dom 精品操作

    javascript Dom 编程艺术

    本 书在简洁明快地讲述JavaScript和DOM的基本知识之后,通过几个实例演示了专业水准的网页开发技术,透彻阐述了平稳退化等一批至关重要的 JavaScript编程原则和最佳实践,并全面探讨了HTML5以及jQuery等JavaScript库...

    JavaScriptDOM编程艺术

    《JavaScript DOM编程艺术》是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍。DOM是HTML和XML文档的结构化表示,JavaScript通过DOM API能够对网页内容进行动态操作,实现丰富的交互效果。...

    JavascriptDOM编程视频教程(17讲)

    教程名称:Javascript DOM编程视频教程(17讲) 课程目录:【】1.JavascriptDOM编程_在什么位置编写JS代码【】10.JavascriptDOM编程_删除节点【】11.JavascriptDOM编程_添加删除节点的实验...

    JavaScript DOM编程艺术【第2版&高清】.pdf

    JavaScript DOM编程艺术,高清资源,无比经典,值得拥有

    JavaScriptDOM编程艺术第二版

    JavaScript DOM编程艺术第二版是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍,主要面向希望提升JavaScript技能并掌握网页动态效果开发的Web开发者。DOM是HTML和XML文档的编程接口,它允许...

    JavaScript.DOM编程艺术(第2版)附录及源码.rar

    《JavaScript.DOM编程艺术(第2版)》是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍。DOM是Web开发中的核心组件,它允许程序员通过JavaScript来操作HTML和XML文档的结构、内容和样式。这本书...

    JavaScriptDom编程艺术

    JavaScriptDom编程艺术,一本很好的前端书籍,有兴趣的可以看看

    javascriptDOM

    DOM是一个树形结构,将网页内容分解为独立的对象,这些对象可以被JavaScript或者其他脚本语言访问和操作。在JavaScript中,DOM主要用于创建、修改和操纵网页元素,从而实现动态网页效果。 在学习JavaScript DOM时,...

    JavaScript DOM编程艺术 第2版 及源码

    《JavaScript DOM编程艺术 第2版》是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍。DOM是Web页面的结构模型,JavaScript通过DOM API能够对网页内容进行动态操作,实现丰富的交互效果。这...

Global site tag (gtag.js) - Google Analytics