JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程

1、文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器。

DOM解析器就是完成结构化文档和DOM树之间的转换关系。

DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树

从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档

2、DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的“内容”,即返回的某个元素的开始标签、结束标签之间的字符串内容(不包含其它子元素),表单控件的标签之间的内容是它的值,因此只能用value来访问。

3、利用结点关系访问HTML元素

  <html>
	<head>
		<title>MyHtml.html</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<style type="text/css">
		.select{
			background-color:#66f;

		}
		</style>
	</head>
	<body>
	<ol id="books">
		<li id="java">疯狂Java讲义</li>
		<li id="ssh">经典JavaEE企业级应用</li>
		<li id="ajax" class="select">疯狂Ajax讲义</li>
		<li id="xml">疯狂XML讲义</li>
		<li id="hadoop">疯狂Hadoop讲义</li>
		<li id="mahout">疯狂mahout讲义</li>
	</ol>
	<input type="button" value="父节点" onclick="change(curTarget.parentNode);"/>
	<input type="button" value="第一个" onclick="change(curTarget.parentNode.firstChild.nextSibling);"/>
	<input type="button" value="上一个" onclick="change(curTarget.previousSibling.previousSibling);"/>
	<input type="button" value="下一个" onclick="change(curTarget.nextSibling.nextSibling);"/>
	<input type="button" value="最后一个" onclick="change(curTarget.parentNode.lastChild.previousSibling);"/>
	<input type="button" value="curTarget" onclick="change(curTarget);"/>
		<script type="text/javascript">
		var curTarget=document.getElementById("ajax");
		var change=function(target){
		alert(target.innerHTML);
		};
		</script>
	</body>
</html>

//在非IE浏览器中,页面中的换行和空白都被当成结点,建议用chrome浏览器运行上面的代码

4、表单在DOM中由HTMLFormElement对象表示,HTMLFormElement的elements属性值是一个HTMLCollection对象,既可以当成普通数组用数字索引访问元素,也可以通过关联数组来访问(即通过字符串索引来访问,该字符串为表单里的name或id属性值)

例程:

	<form id="d" action="" method="get">
	<input type="text" name="user" /><br/>
	<input type="password" name="pass" /><br/>
	<select name="color">
	<option value="red" >红色</option>
	<option value="blue" >蓝色</option>
	</select>
	<input type="button" value="第一个" onclick="alert(document.getElementById('d').elements[0].value);">
	<input type="button" value="第二个" onclick="alert(document.getElementById('d').elements['pass'].value);">
	<input type="button" value="第三个" onclick="alert(document.getElementById('d').color.value);">

5、HTMLSelectElement代表一个列表框或下拉菜单,此对象也支持一些额外的属性

6、演示一个可编辑表格的例子

 <html>
	<head>
		<title>js练习</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<style type="text/css">
			#d1{
			border:1px solid black;
			}
		</style>
	</head>
	<body>
	改变第<input type="text" size="2" id="row"/>行,第<input type="text" size="2" id="col"/>列的值为:<input type="text" size="20" id="rep"/><br/>
	<button onclick="change();">改变</button><br/>
	<table id="d1" border="1" cellspacing="0" >
	<tr>
		<th>姓名</th>
		<th>年龄</th>
	</tr>
	<tr>
		<td>鸟鹏</td>
		<td>26</td>
	</tr>
	<tr>
		<td>周鹏程</td>
		<td>24</td>
	</tr>
	<tr>
		<td>顾慧建</td>
		<td>24</td>
	</tr>
	</table>

	<script type="text/javascript">
	var change=function(){
	var t=document.getElementById("d1");
	var row=document.getElementById("row").value;
	var col=document.getElementById("col").value;
	var repContent=document.getElementById("rep").value;
	row=parseInt(row);
	col=parseInt(col);
	//alert(row+":"+col);
	if(isNaN(row)||isNaN(col)){
	alert("您要修改的行或列一定要是整数!");
	return false;
	}

	if(row>t.rows.length||col>t.rows.item(0).cells.length)
	{
	alert("要修改的单元格超出范围!");
	return false;
	}
	//修改单元格的值
	//t.rows.item(row-1).cells.item(col-1).innerHTML=repContent;
	t.rows[row-1].cells[col-1].innerHTML=repContent;
	}
	</script>
	</body>
</html>

7、演示一个增加HTML元素的例子(通过document.createElement()方法)

例程1:

<body>
	<ul id="d">
	<li>我是要被复制的内容</li>
	</ul>
	<script type="text/javascript">
	var ul=document.getElementById("d");
	var n=ul.firstChild.nextSibling.cloneNode(false);//通过拷贝结点的方式,这比创建结点节约
	//修改被复制的结点
	n.innerHTML="新结点的内容";
	ul.appendChild(n);//一个结点创建出来一定要将该节点添加到DOM中才行
	</script>
	</body>
	//以上代码在IE中有错误,IE不把空白、换行作为Node

   例程2:
	<body id="body">
	<script type="text/javascript">
	var sel=document.createElement("select");
	for(var i=0;i<10;i++){
		//创建一个<option>元素
		var op=new Option("新增的选项"+i,i);
		sel.options[i]=op;
	}
	sel.size=6;
	document.getElementById("body").appendChild(sel);
	</script>
	</body>
	//以上代码IE、非IE通用

8、表格对象的表格元素、表格行有自己的添加子元素的方法,具体查看HTMLTableElement对象的方法

9、删除HTML元素也是通过删除节点也是通过删除节点来完成的。对于普通的HTML元素,可以用通用的方法来删除节点,而列表框、下拉菜单、表格则有额外的方法删HTML元素。删除节点的例程:

<body id="body">
	<input id="add" type="button" value="增加" disabled onclick="add()"/>
	<input id="del" type="button" value="删除"  onclick="del()"/>
	<div id="target" style="width:240px;height:50px;border:1px solid black">被控制的目标元素 </div>
	<script type="text/javascript">
	var body=document.getElementById("body");
	var target=document.getElementById("target");
	var add=function(){
	body.appendChild(target);
	document.getElementById("add").disabled="disabled";
	document.getElementById("del").disabled="";
	}

	var del=function(){
	body.removeChild(target);
	document.getElementById("del").disabled="disabled";
	document.getElementById("add").disabled="";
	}
	</script>
	</body>

10、删除(增加)列表框、下拉菜单的选项

<body id="body">
	<input id="con" type="text"  size="20"/>
	<input id="add" type="button" value="增加" onclick="add()"/>
	<input id="del" type="button" value="删除" onclick="del()"/></br>
	<select id="select" size="6" style="width:120px;">
	<option>1周鹏程</option>
	<option>2周鹏程</option>
	<option>3周鹏程</option>
	</select>
	<script type="text/javascript">
	var select=document.getElementById("select");
	var text=document.getElementById("con");
	var add=function(){
	if(text.value!=""){
	 var op=new Option(text.value);
	 select.options[select.options.length]=op;
	 }else{
		alert("请输入有效字符!");
	  }
	}
	var del=function(){
	if(select.options.length>0){
	 select.options[select.options.length-1]=null;//也可以用select.remove(select.options.length-1)
	 }
	else{
	alert("列表已被清空了!");
	}
	}
	</script>
	</body>

11、使用window对象的location属性

<body id="body">
	<script type="text/javascript">
	var loc=window.location;
	var locStr="当前对象的location信息是:\n";
	for(var propname in loc){
		locStr+=propname+":"+loc[propname]+"\n"
	}
	alert(locStr);
	</script>
	</body>

12、使用window对象的screen属性

	<body id="body">
	<script type="text/javascript">
	var str="当前屏幕的信息是:\n";
	for(var a in window.screen){
		str+=a+":"+window.screen[a]+"\n";
	}
	alert(str);
	</script>
	</body>
//弹出新窗口
	<body id="body">
	<script type="text/javascript">
	var width=window.screen.width;
	var height=window.screen.height;
	window.open("test2.html","_blank","left=0,top=0,width="+width+",height="+height+",toolbar=no,menubar=no,resize=no");
	</script>
//window对象提供的其他对话框
	<body id="body">
	<script type="text/javascript">
	alert(confirm('请点击一个按钮!点确定我显示true,点取消我显示false'));
	</script>
	</body>
<span style="white-space:pre">	</span><body id="body">
	显示你输入的内容:<span id="span"></span>
	<script type="text/javascript">
	var content=window.prompt("请输入你的信息:","");
	document.getElementById("span").innerHTML=content;
	</script>
	</body>

13、使用定时器

<body id="body">
		显示当前时间:<span id="time"></span>
	<script type="text/javascript">
	var timer;
	var cur=new Date().getTime();
	var setTime=function(){
		document.getElementById("time").innerHTML=new Date().toLocaleString();
		//设置停止条件
		if(new Date().getTime()-cur>60*1000){clearInterval(timer);}
	}
	timer=window.setInterval("setTime();",1000);//每隔1000ms调用一次

19.获取地理位置(Chrome浏览器直接拒绝、IE不支持、Firefox询问)

<body id="body">
	<script type="text/javascript">
	var okHandler=function(position){
		var geoMessage="用户所在的地理位置:<br/>";
		geoMsg+="timestamp属性为:"+position.timestamp+"<br/>";
		//获取Coordinates对象,该对象包含了详细地地理位置信息
		var coords=position.coords;
		for(var prop in coords){
		 geoMsg+=prop+":"+coords[prop]+"<br/>";
		}
		document.writeln(geoMsg);
	}

	var errorHandler=function(error){
		var errMsg={
			1:'用户拒绝了位置服务',
			2:'无法获得地理位置信息',
			3:'获取地理位置信息超时'
		};
		alert(errMsg[error.code]);
	}
	//获取地理位置
	navigator.geolocation.getCurrentPosition(okHandler,errorHandler,{enableHighAccuracy:true,maximumAge:1000});
	</script>
	</body>

20、动态生成一个页面

<body id="body">
	<script type="text/javascript">
	var n=0;//计数器
	var win=null;
	var show=function(msg){
	if((win==null)||(win.closed)){
			win=window.open("","console","width=400,height=250,resizable");
		}
		//让弹窗得到焦点
	win.focus();
	win.document.writeln(msg);
	}
	</script>
	<input type="button" value="单击" onclick="show('您单击了按钮:'+(++n)+'次。<br/>');"/>
	</body>

JavaScript--基于对象的脚本语言学习笔记(二),布布扣,bubuko.com

时间: 2024-10-24 23:07:38

JavaScript--基于对象的脚本语言学习笔记(二)的相关文章

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r

JavaScript--基于对象的脚本语言学习笔记(一)

1.两种嵌入js的方式 使用javascript前缀构建url:<a href="javascript:alert('运行JavaScript..')">运行js</a> js脚本放在<style></style>之间: <style type="text/javascript"> alert("运行JavaScript..") </script> 2.如果没有声明变量直接使

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变量的类型在变量名的后面.例如:不是,int a,而是 a int.当定义了一个变量,它默认赋值为其类型的 null 值.这意味着,在 var a int后,a 的 值为 0.而 var s string,意味着 s 被赋值为零长度字符串,也就是 "". 3.Go语言的变量声明和赋值 在Go中使

InstallShield 脚本语言学习笔记

InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      1.变量      BOOL 布尔型 值为TRUE(1)或FALSE(0)      CHAR 字符型 一字节长的(8bit)的字符      HWND 窗口句柄 用来存放窗口句柄      INT 整型 两字节长的整数      LIST 列表型 指向InstallShield列表,用ListCr

TCL脚本语言学习笔记

关于历史记录的一些命令: history             显示之前所有命令的历史记录默认为20条,可通过history keep 40改成40条等. history redo 2 表示再次执行history中的第二条命令. !!                 重新执行上一条命令!event           重新执行event命令 ^old^new       取得上一命令,并将出现的所有old(字符串,不管是否是独立的单词)替换成new,然后执行,用于修改错误非常方便. histo

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

【GO】GO语言学习笔记二

基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 字符串型:string 字符型:rune 错误类型:error 复合类型: 指针:pointer 数组:array 切片:slice 字典:map 通道:chan 结构体:struct 接口:interface 1.布尔型,与其他语言中的布尔型一样 2.整型: a.类型表示 需要注意的是,int和

C语言学习笔记二

第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组     int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组     char str[6]={'h','e','l','l','o','\0'};  \0是结束标志,如果不加,系统会自动给后面补个\0 字符串  char str[]="hello"; 在数组中,   指针-指针得到是两个地址之间元素的个数. sizeof(数据名)表示的是数组整个的大小. 其余情况都指数组首元素大小 关于字符

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr