js学习笔记77——dom查询3

parentNode
previousSibling
nextSibling
在这里插入图片描述

代码优化

前几节写了很多重复性代码,每次都得写一个单击响应函数,代码基本一样,这很费时,且代码量变多。如何简化?

		// 定义一个函数,专门用来为指定元素绑定单击响应函数
		// idStr为要绑定单击响应函数的对象的id属性值
		// fun为事件回调函数,当单击元素时,该函数将会被触发
		function myClick(idStr,fun) {
			// 查找#bj节点
			var btn = document.getElementById(idStr);
			btn.onclick = fun;
		}

验证:

myClick('btn07',function(){alert("hello");});

在这里插入图片描述

parentNode

			myClick('btn07',function(){
				//获取id为bj的节点
				var bj = document.getElementById("bj");
					
				//返回#bj的父节点
				var pn = bj.parentNode;
					
				alert(pn.innerHTML);
			
			});

在这里插入图片描述
在这里插入图片描述

innerText

该属性可以获取到元素内部的文本内容
它和innerHTML类似,不同的是它会自动将html去除

alert(pn.innerText);

在这里插入图片描述

previousSibling

			//为id为btn08的按钮绑定一个单击响应函数
			myClick("btn08", function () {

				//获取id为android的元素
				var and = document.getElementById("android");
				//返回#android的前一个兄弟节点(也可能获取到空白的文本)
				var ps = and.previousSibling;

				alert(ps);

			});

在这里插入图片描述
获取的是空白文本,因为它获得的是空白

在这里插入图片描述

previousElementSibling

获取前一个兄弟元素,IE8及以下不支持。
这个就不会获取到空白。

					var pe = and.previousElementSibling;
					
					alert(pe);

在这里插入图片描述

nextSibling

类似,不解释。

完整代码

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>document</title>
	<link rel="stylesheet" type="text/css" href="./day13/source/day13/style/css.css" />
	<script type="text/javascript">
		// 定义一个函数,专门用来为指定元素绑定单击响应函数
		// idStr为要绑定单击响应函数的对象的id属性值
		// fun为事件回调函数,当单击元素时,该函数将会被触发
		function myClick(idStr, fun) {
			// 查找#bj节点
			var btn = document.getElementById(idStr);
			btn.onclick = fun;
		}
		window.onload = function () {
			// 查找#bj节点
			var btn01 = document.getElementById("btn01");
			btn01.onclick = function () {
				var bj = document.getElementById("bj");
				alert(bj.innerHTML);
			};

			// 为id为btn02的按钮绑定一个单击响应函数
			var btn02 = document.getElementById("btn02");
			btn02.onclick = function () {
				var lis = document.getElementsByTagName("li");

				for (var i = 0; i < lis.length; i++) {
					alert(lis[i].innerHTML);
				}
			};
			//为id为btn03的按钮绑定一个单击响应函数
			var btn03 = document.getElementById("btn03");
			btn03.onclick = function () {

				var inputs = document.getElementsByName("gender");
				for (var i = 0; i < inputs.length; i++) {

					//alert(inputs[i].innerHTML);
					/*
					 * 如果需要读取元素节点属性,
					 * 	直接使用 元素.属性名
					 * 		例子:元素.id 元素.name 元素.value
					 * 		注意:class属性不能采用这种方式,
					 * 			读取class属性时需要使用 元素.className
					 */
					alert(inputs[i].className);
				}
			};
			//为id为btn04的按钮绑定一个单击响应函数
			var btn04 = document.getElementById("btn04");
			btn04.onclick = function () {

				//获取id为city的元素
				var city = document.getElementById("city");

				//查找#city下所有li节点
				var lis = city.getElementsByTagName("li");

				for (var i = 0; i < lis.length; i++) {
					alert(lis[i].innerHTML);
				}

			};
			//为id为btn05的按钮绑定一个单击响应函数
			var btn05 = document.getElementById("btn05");
			btn05.onclick = function () {
				//获取id为city的节点
				var city = document.getElementById("city");
				//返回#city的所有子节点

				var cns = city.childNodes;
				var cns2 = city.children;
				alert(cns2.length);
			};
			//为id为btn06的按钮绑定一个单击响应函数
			var btn06 = document.getElementById("btn06");
			btn06.onclick = function () {
				//获取id为phone的元素
				var phone = document.getElementById("phone");
				//返回#phone的第一个子节点
				//phone.childNodes[0];
				//firstChild可以获取到当前元素的第一个子节点(包括空白文本节点)
				var fir = phone.firstChild;
				alert(fir);
				// 获取当前元素的第一个子元素
				fir = phone.firstElementChild;
				alert(fir);
			};
			myClick('btn07', function () {
				//获取id为bj的节点
				var bj = document.getElementById("bj");

				//返回#bj的父节点
				var pn = bj.parentNode;

				// alert(pn.innerHTML);
				alert(pn.innerText);

			});
			//为id为btn08的按钮绑定一个单击响应函数
			myClick("btn08", function () {

				//获取id为android的元素
				var and = document.getElementById("android");
				//返回#android的前一个兄弟节点(也可能获取到空白的文本)
				var ps = and.previousSibling;
				// var pe = and.previousElementSibling;
				alert(ps);

			});
			//读取#username的value属性值
			myClick("btn09", function () {
				//获取id为username的元素
				var um = document.getElementById("username");
				//读取um的value属性值
				//文本框的value属性值,就是文本框中填写的内容
				alert(um.value);
			});
			//设置#username的value属性值
			myClick("btn10", function () {
				//获取id为username的元素
				var um = document.getElementById("username");

				um.value = "今天天气真不错~~~";
			});
			//返回#bj的文本值
			myClick("btn11", function () {

				//获取id为bj的元素
				var bj = document.getElementById("bj");

				// alert(bj.innerHTML);
				// alert(bj.innerText);

				//获取bj中的文本节点
				/*var fc = bj.firstChild;
				alert(fc.nodeValue);*/

				alert(bj.firstChild.nodeValue);


			});
		};
	</script>
</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">查找#bj节点</button></div>
		<div><button id="btn02">查找所有li节点</button></div>
		<div><button id="btn03">查找name=gender的所有节点</button></div>
		<div><button id="btn04">查找#city下所有li节点</button></div>
		<div><button id="btn05">返回#city的所有子节点</button></div>
		<div><button id="btn06">返回#phone的第一个子节点</button></div>
		<div><button id="btn07">返回#bj的父节点</button></div>
		<div><button id="btn08">返回#android的前一个兄弟节点</button></div>
		<div><button id="btn09">返回#username的value属性值</button></div>
		<div><button id="btn10">设置#username的value属性值</button></div>
		<div><button id="btn11">返回#bj的文本值</button></div>
	</div>
</body>

</html>

css文件

@CHARSET "UTF-8";

body {
	width: 800px;
	margin-left: auto;
	margin-right: auto;
}

button {
	width: 300px;
	margin-bottom: 10px;
}

#btnList {
	float:left;
}

#total{
	width: 450px;
	float:left;
}

ul{
	list-style-type: none;
	margin: 0px;
	padding: 0px;
}

.inner li{
	border-style: solid;
	border-width: 1px;
	padding: 5px;
	margin: 5px;
	background-color: #99ff99;
	float:left;
}

.inner{
	width:400px;
	border-style: solid;
	border-width: 1px;
	margin-bottom: 10px;
	padding: 10px;
	float: left;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小欣CZX

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值