七、Bom编程、Dom编程

一、BOM编程

	javascript分为三部分:
					
					1.ECMAScript(基本语法)
					2.BOM(Browser  Object Model) 浏览器对象模型:
															浏览器对象模型就是把浏览器的各个部分都用了一个对象进行描述,
															如果我们要操作浏览的一些属性,我们就可以通过浏览器对象模型
															的对象进行操作。
																															
					3.DOM	
1.1 window
	window代表了一个新开的一个窗口


	常用方法:			
			window.open("http://www,baidu.com","_blank" ,"height=400px,width=300px,toolbar=no ")
					
			window.resizeTo(300,400) 
					把一个窗口更改指定的宽度和高度(IE支持,谷歌不支持)
			
			window.moveBy(100,100) 
					相对于原来的窗口左上角指定移动x、y偏移量(IE支持,谷歌不支持)
		
			window.moveTo(100,100)  
					将窗口移到某个位置(IE支持,谷歌不支持)
		
			
			var  id=  window.setInterval("show()"100) 每隔指定的毫秒数,运行代码	  	
			window.clearInterval( id)  取消定时任务	0
		
			window.setTimeOut("show()",1000  ) 经过指定的毫秒值,执行执行的代码(只执行一次)

 【window对象比较特殊,如果想用window的对象和方法时,window可以省略不写。】

>>>>>> 打开窗口

	<script type="text/javascript">
		function show(){
			window.open("http://www,baidu.com","_blank" ,"height=400px,width=300px,toolbar=no,titlebar=no ")
		}
	</script>
	
	</head>
	<body>
		<input type="button"  onclick="show()" value="打开" />
	</body>

在这里插入图片描述

>>>>>> 不停的弹广告
<script type="text/javascript">
		
	function op(){
		window.open("http://www.baidu.com");
	}

	window.setInterval("op()",5000); //每隔5s弹出广告

	</script>
>>>>>> 定时任务、以及取消定时任务
<script type="text/javascript">
		
	function op(){
		window.open("http://www.baidu.com");
	}

	var id=window.setInterval("op()",5000); //每隔5s弹出广告

	window.clearInterval(id);//取消定时任务

	</script>
	

注意事项

	1.window对象比较特殊,如果想用window的对象和方法时,window可以省略不写。
1.2 location地址栏对象
    		var  str= location.href   获取url
			location.href="http://www.baiodu.com"  设置url
			
			location.reload(); 刷新网页
1.3 screen屏幕对象
			screen.height  获取屏幕的垂直分辨率
			screen.width   获取屏幕的水平分辨率

			screen.availHeight   获取系统屏幕的工作区域宽度(排除微软任务栏)
			screen.availWidth(获取系统屏幕的工作区域宽度)

二、 DOM编程

	DOM(Document Objecevt Model) :文档对象模型
2.1 DOM基础
2.1.1 DOM来源
浏览器在解析一个html页面时,会这HTML页面中所有的标签都描述为一个相应的对象。我们在浏览器上看到的信息只不是这些标签对象的属性而已。

每一个标签都对应着一个对象。标签的每一个属性都对应着对象的一个属性。所以如果我们箱操作标签的属性,只需要找到该标签对应的对象,操作对象的属性即可。【每一个标签都对应着一个对象,标签属性对应着对象属性】
2.1.2 具体操作可以使用API文档。

使用文档:DHTML.chm文档
使用文档:DHTML.chm文档
使用文档:DHTML.chm文档
使用文档:DHTML.chm文档
使用文档:DHTML.chm文档
切记:此文档很重要
在这里插入图片描述

2.2 document对象

文档树

html标签对象构成一个树状结构,我们把这个树称为文档树,整个文档树使用了document对象来描述。文档树的每一个标签对象我们都称为节点(Node)

在这里插入图片描述

2.3 查找节点
2.3.1 通过html标签属性找节点
//获取文档中所有的标签
		var doc=document.all; 
		for(var i=0;i<doc.length;i++){
			console.log(doc[i].nodeName)
		}

		//获取文档中所有带有href属性的标签对象
		var links=document.links;
		for(var i=0;i<doc.length;i++){
			links[i].href="http://www.baidu.com"
		}

		//根据ID找元素
		var box=document.getElementById("box");
		
		//根据Class找到所有元素
		var cc=	document.getElementsByClass("cc");

		//根据name找到所有元素
		var names=document.getElementsByTagName("c2");

		//根据标签名找到所有元素
		var  imgs=document.getElementsByTagName("img")
		for(var i=0;i<imgs.length;i++){
			imgs[i].src="1.jpg";
			imgs[i].width="200";
			imgs[i].height="200";
		}	
2.3.2 通过关系找节点

			通过关系(父子关系、兄弟关系)
						parentNode  获取当前元素的父节点
						childNode    获取当前元素的所有下一级子元素
						firseChild      获取当前元素的所有子元素的第一个。

					    nextSibling    获取当前节点的下一个节点 (兄弟节点)
					    previousSibling  获取当前节点的上一个节点(兄弟节点)

>>>>>> childNodes
	
	childsNodes获取子节点时,会获取到空文本和注释
	
	注意:
	  	解析成DOM树时,script标签会被移入body标签中。
	    空文本也占一个#text 标签
	    注释占一个标签
	    获取body下的所有子标签,获取到5个标签。
	<body >
		 <input type="checkbox" /> 电影<br/>
 	</body>
	<script type="text/javascript">
		
			var body=document.getElementsByTagName("body")[0];
			var  childs=body.childNodes;

			for(var i=0;i<childs.length;i++){
				console.log(childs[i])
			}
		
	</script>

在这里插入图片描述

2.4 创建、修改、删除节点
			document.createElement("标签名")   
								创建元素节点
								
			elt.setAttribute("属性名""属性值")  
								设置属性
								
			elt.appendChild(e)  
								添加元素到elt中的最后的位置

		    elt.insertBefore(new,oldChild)  
		    					在元素之前出入新的节点
								elt必须是oldChild的直接父节点
								
	        elt.removeChild(e) 删除节点
								elt必须是e的直接父节点
			
			elt.innerHTML=""  删除该元素下的所有节点、内容
			
>>>>>> 新增节点
<body>
	<input type="button"  value="新增按钮"  onclick="add()"/>
</body>

<script type="text/javascript">
	var num=0;

	//创建节点
	function add(){
		var ins=document.createElement("input");
		ins.setAttribute("type","button");
		ins.setAttribute("value","按钮"+(num++));

		var body=document.getElementsByTagName("body")[0];
		body.appendChild(ins);
	}
</script>

在这里插入图片描述

>>>>>> 插入节点
<body>
	<table>

		<tr>
			<td><input type="file" /></td>
			<td> <a href="#" >删除附件</a></td>
		</tr>

		<tr id="b">
			<td><input type="button"  onclick="add()"  value="添加附件"/> </td>
		</tr>

	</table>
</body>

<script type="text/javascript">
	var num=0;

	//创建节点
	function add(){

		var input=document.createElement("input");
		input.setAttribute("type","file");

		var a=document.createElement("a");
		a.innerHTML="删除附件";

		var td1=document.createElement("td");
		td1.appendChild(input);

		var td2=document.createElement("td");
		td2.appendChild(a);

		var tr=document.createElement("tr");
		tr.appendChild(td1);
		tr.appendChild(td2);

		var table=document.getElementsByTagName("tbody")[0];
		var old=document.getElementById("b");


		table.insertBefore(tr,old);
	}
</script>

在这里插入图片描述

>>>>>> 删除节点
<body>
	<table>

		<tr>
			<td><input type="file" /></td>
			<td> <a href="#" onclick="remove(this)">删除附件</a></td>
		</tr>

		<tr id="b">
			<td><input type="button"  onclick="add()"  value="添加附件"/> </td>
		</tr>

	</table>
</body>

<script type="text/javascript">
	var num=0;

	//创建节点
	function add(){

		var input=document.createElement("input");
		input.setAttribute("type","file");

		var a=document.createElement("a");
		a.innerHTML="删除附件";
		a.setAttribute("href","#");
		a.setAttribute("onclick","remove(this)");

		var td1=document.createElement("td");
		td1.appendChild(input);

		var td2=document.createElement("td");
		td2.appendChild(a);

		var tr=document.createElement("tr");
		tr.appendChild(td1);
		tr.appendChild(td2);

		var table=document.getElementsByTagName("tbody")[0];
		var old=document.getElementById("b");


		table.insertBefore(tr,old);
	}


	function remove(obj){
		var o=obj.parentNode.parentNode.parentNode;
		var o2=obj.parentNode.parentNode;
		o.removeChild(o2)

	}
</script>

在这里插入图片描述

>>>>>> removeChild在循环中的用法

removeChild在删除父类的子元素集合时,子元素集合的长度也发生变化,所以不能使用常规的for循环。可以使用下面的方法清空子元素集合。

<body>
	 <select onchange="clean(this)">
			  <option>江苏</option>
			  <option>北京</option>
			  <option>上海</option>
			  <option>杭州</option>
	 </select>

</body>

<script type="text/javascript">
	
	function  clean(obj){
		var arr=obj.childNodes;
		//特殊用法
		for(var i=0;i<arr.length;){
			obj.removeChild(arr[i])
		}
	}
</script>
2.5 其他细节
2.5.1 Select标签对象 – 下拉框
select标签对象应与onchange事件进行绑定。用户选定选项时,触发事件。
select标签对象的属性selectedIndex,用于获取选定选项的索引值。
<body>
	 <select >
			  <option>江苏</option>
			  <option>北京</option>
			  <option>上海</option>
			  <option>杭州</option>
	 </select>

</body>

<script type="text/javascript">
	
	var sel=document.getElementsByTagName("select")[0];
	sel.onchange=function(){
		console.log(sel.selectedIndex)
	}
	
</script>

在这里插入图片描述

清空select中的内容
方式一:

<body>
	 <select >
			  <option>江苏</option>
			  <option>北京</option>
			  <option>上海</option>
			  <option>杭州</option>
	 </select>

</body>

<script type="text/javascript">
	
	var sel=document.getElementsByTagName("select")[0];
	sel.onchange=function(){
		sel.options.length=0; //清空option
	}
	
</script>

方式二:

<body>
	 <select >
			  <option>江苏</option>
			  <option>北京</option>
			  <option>上海</option>
			  <option>杭州</option>
	 </select>

</body>

<script type="text/javascript">
	
	var sel=document.getElementsByTagName("select")[0];
	sel.onchange=function(){
			var arr=sel.childNodes;
			for(var i=0;i<arr.length;){
				sel.removeChild(arr[i])
			}
	}
	
</script>
2.5.2 table的特殊之处

一个表格至少有一个tbody,即使我们没有加上该标签,浏览器在解析时,也会加上该标签。所以我们在查找table中元素的父元素时,要特殊处理。

我们在写一个表格时,固定格式为

	<table>
		  <tr>
				<td>1</td>
				<td>2</td>
		  </tr>
	</table>

浏览器解析格式为:

	<table>
		<tbody>
			  <tr>
					<td>1</td>
					<td>2</td>
			  </tr>
		 </tbody> 
	</table>
2.6 函数中this的用法

	函数中直接使用this关键字,this指向的是window对象;
	函数中传入this关键字,this指向的是绑定该方法的对象。


>>>>>> 通过JS注册事件,关联方法的this对象指的是被绑定的对象本身
<body>
	
	<input type="button" id="s1">	
	<script type="text/javascript">
	
		
		document.getElementById("s1").onclick=function(){
			console.log(this);
		}
	
	</script>
	
</body>

在这里插入图片描述

>>>>>> 直接在HTML注册事件,关联方法的this对象指的是window对象
函数中直接使用this关键字,由于this指向的是window对象,没有parentNode属性,所以报错。
<body>
	
	<input type="button" id="s1" onclick="demo()" value="点击">	
	<script type="text/javascript">
	
		function demo(){
			console.log(this);
		}
		
	
	</script>
	
</body>

在这里插入图片描述

>>>>>> 直接在HTML注册事件,并传入this关键字,this指向的是被绑定的对象本身。【方法一定要有参数】
<body>
		<input type="button" value="删除" onclick="remove(this)" />
</body>

<script type="text/javascript">
	
	function remove(obj){
		console.log(obj)
		var o=obj.parentNode;
		o.removeChild(obj)

	}
</script>

在这里插入图片描述

2.6 操作CSS样式
>>>>>> 借助文档,操作CSS样式
		span.style.font="12px";
		div.style.backgroundColor="red";
			js操作css样式,是使用style属性来进行操作。我们应根据开发者文档来进行查看。

在这里插入图片描述

>>>>>> 模拟四位验证码
<body>
	<span></span><br/>
	<input type="button" style="width:100px;background-color:pink;" value="看不清,换一个">
</body>

<script type="text/javascript">
	
	var span=document.getElementsByTagName("span")[0];
	var bu=document.getElementsByTagName("input")[0];
	
	bu.onclick=function(){
		var arr=["a","b","我","是","谁","c"];
		console.log(arr)

		var str="";
		for(var i=0;i<4;i++){
			
			var index=Math.floor(Math.random()*arr.length)
			str+=arr[index];
		}
		console.log(str)
		span.innerHTML=str;	

		//js操作css样式
		span.style.fontSize="14px";
		span.style.color="red";
		span.style.backgroundColor="black";
		span.style.textDecoration="line-through"
	}
</script>

三、其他

3.1 下拉框绑定的事件
	下拉框推荐绑定onchangge事件。即当下拉框选择后触发
	<select id="s">
		<option>选择城市</option>
		<option>北京</option>
		<option>上海</option>
		<option>徐州</option>

	</select>	

	<script type="text/javascript">
	
		document.getElementById("s").onchange=function(){
			
		}
		
	
	</script>
3.2 获取下拉框选定的值
3.2.1 直接获取下拉框选中的对象的value值
	<select id="s">
		<option >选择城市</option>
		<option value="bj">北京</option>
		<option value="sh">上海</option>
		<option value="xz">徐州</option>

	</select>	

	<script type="text/javascript">
	
		document.getElementById("s").onchange=function(){
			var v=this.value;
			alert(v)
		}
		
	
	</script>

在这里插入图片描述

3.2.2 直接获取下拉框的选中的对象
	
	<select id="s">
		<option >选择城市</option>
		<option value="bj">北京</option>
		<option value="sh">上海</option>
		<option value="xz">徐州</option>

	</select>	

	<script type="text/javascript">
	
		document.getElementById("s").onchange=function(){
			var index=this.selectedIndex;
			console.log(this[index])
		}
		
	
	</script>

在这里插入图片描述

三、案例:二级联动

<body>
	省份 <select onchange="showcity(this)">
			  <option>江苏</option>
			  <option>北京</option>
			  <option>上海</option>
			  <option>杭州</option>
		 </select>
	
	城市 <select>
			  <option>城市</option>
		 </select>

</body>

<script type="text/javascript">
	
	function showcity(obj){
		var cityss=[["南京","徐州","邳州"],["黑将","三墩镇"]];

		//获取下拉框选中的索引值
		var index=obj.selectedIndex;
		var citys=cityss[index];

		var ins=document.getElementsByTagName("select")[1];

		//清空ins中的城市
		var cs=ins.childNodes;
		console.log(cs);
		for(var i=0;i<cs.length;){
			ins.removeChild(cs[0])
		}
		console.log(cs)

		//添加ins中的城市
		for(var i=0;i<citys.length;i++){
			var opt=document.createElement("option");
			opt.innerHTML=citys[i];
			ins.appendChild(opt);
		}

	}
</script>

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值