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;
}