JavaScript DOM模型 及 get... 方法
1、DOM模型
2、createElement 方法
3、document 对象三个查询方法的使用注意事项
4、getElementById 方法
5、getElementsByName 方法
6、getElementsByTagName 方法
7、节点的常用属性和方法
1、DOM模型
DOM 的全称是 Document Object Model 文档对象模型 ==>就是把文档中的标签,属性,文本,转化成为对象来管理。 1、Document 对象 Document 对象的理解: 1、Document 它管理了所有Html文档内容。 2、document 它是一种数结构的文档。有层级关系。 3、它让我们把所有的标签 都 对象化 4、我们可以通过document 访问所有的标签对象
2、createElement 方法
<script type="text/javascript"> window.onload = function () { // 现在让我们使用js代码来创建html标签,并显示在页面上 // 标签的内容就是:<div>this is my major</div> var divObj = document.createElement("div"); //在内存中<div></div> var textObj = document.createTextNode("Java、PHP、C#"); //有一个文本节点对象 #Java、PHP、C# divObj.appendChild(textObj); //divObj.innerHTML = "this is my major"; //<div>this is my major</div>,还只是在内存中 //添加子元素 document.body.appendChild(divObj); //document.body 要在页面加载完成使用 } </script>
3、document 对象三个查询方法的使用注意事项
document 对象的三个查询方法,如果有 id属性,优先使用getEleMENTById方法来进行查询 * 如果没有id 属性,则优先使用getElementsByName 方法来进行查询 * 如果id 属性和 name 属性都没有最后再按标签名查 getElementsByTagName * * 以上三个方法,一定要在页面加载完成之后执行,才能查询到标签对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> /*** * document 对象的三个查询方法,如果有 id属性,优先使用getEleMENTById方法来进行查询 * 如果没有id 属性,则优先使用getElementsByName 方法来进行查询 * 如果id 属性和 name 属性都没有最后再按标签名查 getElementsByTagName * * 以上三个方法,一定要在页面加载完成之后执行,才能查询到标签对象 */ alert(document.getElementById("btn01")) function checkAll() { alert(document.getElementById("btn01")) // document.getElementsByTagName("input"); 是按照指定标签名来进行查询并返回集合 // 这个集合的操作跟数组 一样 // 集合中都是dom对象 // 集合中元素顺序,是它们在html页面中从上到下的顺序 var inputs = document.getElementsByTagName("input"); for(var i=0;i<inputs.length;i++){ inputs[i].checked = true; } } </script> </head> <body> 兴趣爱好: <input type="checkbox" value="PHP" checked="checked">PHP <input type="checkbox" value="Java">Java <input type="checkbox" value="C++">C++ <input type="checkbox" value="Python">Python <br> <button id="btn01" onclick="checkAll()">全选</button> </body> </html>
4、getElementById 方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> /** * 需求:当用户点击了校验按钮,要获取输入框里的内容。 * 然后验证其是否合法 * 验证规则是:必须由字母,数字,下划线组成,并且长度是5到12位 */ function onclickFun() { //1、当我们要操作一个标签的时候,一定要先获取这个标签对象 var name = document.getElementById("username") //[object HTMLInputElement] 它就是dom对象 //alert(name.value); //获取输入框的内容 var usernameTest = name.value; //获取输入框的内容 //如何验证 字符串 符合某个规则,需要使用正则表达式 var patt = /^\w{5,12}$/; /*** * test() 方法用于测试某个字符串,是不是匹配我的规则 * 匹配就返回 true,不匹配就返回 false */ var spanObj = document.getElementById("span"); //innerHTML 表示起始标签和结束标签中的内容 //innerHTML 这个属性可读,可写。可赋值 //alert(spanObj.innerHTML); if(patt.test(usernameTest)){ //alert("用户名合法!!"); //spanObj.innerHTML = "用户名合法!!"; spanObj.innerHTML = "<img src=\"../../imgs/true.jpg\" width=\"25\" height=\"25\">"; }else{ //alert("用户名不合法!!"); //spanObj.innerHTML = "用户名不合法!!"; spanObj.innerHTML = "<img src=\"../../imgs/false.jpg\" width=\"25\" height=\"25\">"; } } </script> </head> <body> 用户名: <input type="text" id="username" value="wzx"> <span style="color: red" id="span"> </span> <button onclick="onclickFun()">校验</button> </body> </html>
5、getElementsByName 方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> //全选 方法 function checkAll() { // 让所有复选框都选中 // document.getElementsByName(); 是根据 指定的name属性查询返回多个标签对象集合 // 这个集合的操作跟数组一样 // 集合中每个元素都是dom对象 // 这个集合中的元素顺序是它们在html页面中从上到下的顺序 var hobbies = document.getElementsByName("hobby"); // alert(hobbies[2].value); // checked 表示复选框的选中状态,如果选中是true,不选中是false // checked 这个属性可读,可写 for(var i=0;i<hobbies.length;i++){ hobbies[i].checked = true; } } //全不选 方法 function checkNo() { var hobbies = document.getElementsByName("hobby"); for(var i=0;i<hobbies.length;i++){ hobbies[i].checked = false; } } //反选 方法 function checkReverse() { var hobbies = document.getElementsByName("hobby"); for(var i=0;i<hobbies.length;i++){ hobbies[i].checked = !hobbies[i].checked; // if(hobbies[i].checked){ // hobbies[i].checked = false; // }else{ // hobbies[i].checked = true; // } } } </script> </head> <body> 兴趣爱好: <input type="checkbox" name="hobby" value="PHP" checked="checked">PHP <input type="checkbox" name="hobby" value="Java">Java <input type="checkbox" name="hobby" value="C++">C++ <input type="checkbox" name="hobby" value="Python">Python <br> <button onclick="checkAll()">全选</button> <button onclick="checkNo()">全不选</button> <button onclick="checkReverse()">反选</button> </body> </html>
6、getElementsByTagName 方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> // 全选 function checkAll() { // document.getElementsByTagName("input"); 是按照指定标签名来进行查询并返回集合 // 这个集合的操作跟数组 一样 // 集合中都是dom对象 // 集合中元素顺序,是它们在html页面中从上到下的顺序 var inputs = document.getElementsByTagName("input"); for(var i=0;i<inputs.length;i++){ inputs[i].checked = true; } } </script> </head> <body> 兴趣爱好: <input type="checkbox" value="PHP" checked="checked">PHP <input type="checkbox" value="Java">Java <input type="checkbox" value="C++">C++ <input type="checkbox" value="Python">Python <br> <button onclick="checkAll()">全选</button> </body> </html>
7、节点的常用属性和方法
节点就是标签对象
* 方法:
* 通过具体的元素节点调用 getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点
* appendChild(oChildNode) 方法,可以添加一个子节点,oChildNode 是要添加的孩子节点
*
* 属性:
* childNodes 属性,获取当前节点的所有子节点
* firstChild 属性,获取当前节点的第一个子节点
* lastChild 属性,获取当前节点的最后一个子节点
* parentNode 属性,获取当前节点的父节点
* nextSibling 属性,获取当前节点下一个节点
* previousSibling 属性,获取当前节点的上一个节点
* className 用于获取或设置标签的class属性值
* innerHTML 属性,表示获取/设置起始标签和结束标签中的内容
* innerText 属性,表示获取/设置起始标签和结束标签中的文本
例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="../../css/dom.css">
<script type="text/javascript">
/**
* 节点就是标签对象
* 方法:
* 通过具体的元素节点调用 getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点
* appendChild(oChildNode) 方法,可以添加一个子节点,oChildNode 是要添加的孩子节点
*
* 属性:
* childNodes 属性,获取当前节点的所有子节点
* firstChild 属性,获取当前节点的第一个子节点
* lastChild 属性,获取当前节点的最后一个子节点
* parentNode 属性,获取当前节点的父节点
* nextSibling 属性,获取当前节点下一个节点
* previousSibling 属性,获取当前节点的上一个节点
* className 用于获取或设置标签的class属性值
* innerHTML 属性,表示获取/设置起始标签和结束标签中的内容
* innerText 属性,表示获取/设置起始标签和结束标签中的文本
*/
window.onload = function () {
//1、查找#bj节点
document.getElementById("btn01").onclick = function () {
var bjObj = document.getElementById("bj");
alert(bjObj.innerHTML);
}
//2、查找所有li节点
document.getElementById("btn02").onclick = function () {
var lis = document.getElementsByTagName("li");
alert(lis.length);
}
//3、查找name=gender的所有节点
document.getElementById("btn03").onclick = function () {
//var genders = document.getElementsByName("gender")[1].value; //获取具体值
var genders = document.getElementsByName("gender");
alert(genders.length);
}
//4、查找#city下所有的li节点
document.getElementById("btn04").onclick = function () {
//1、获取id为city的节点
//2、通过city节点,getElementsTagName按标签名查找子节点
var lis = document.getElementById("city").getElementsByTagName("li")
alert(lis.length);
}
//5、返回#city的所有子节点
document.getElementById("btn05").onclick = function () {
//1、获取id为city的节点
//2、通过city获取所有节点
var childnode = document.getElementById("city").childNodes.length;
alert(childnode);
}
//6、返回#phone的第一个子节点
document.getElementById("btn06").onclick = function () {
var firstn = document.getElementById("phone").firstChild.innerHTML;
alert(firstn);
}
//7、返回#bj的父节点
document.getElementById("btn07").onclick = function () {
//1、查找id为bj的节点
//2、bj节点获取父节点
var parentnode = document.getElementById("bj").parentNode.innerText;//innerHTML也可以
alert(parentnode);
}
//8、返回#android的前一个兄弟节点
document.getElementById("btn08").onclick = function () {
//1、获取id为android的节点
//2、通过android节点获取前面兄弟节点
alert(document.getElementById("android").previousSibling.innerHTML)
}
//9、返回#username的vaule属性
document.getElementById("btn09").onclick = function () {
alert(document.getElementById("username").value);
}
//10、设置#username的value属性值
document.getElementById("btn10").onclick = function () {
document.getElementById("username").value = "爱新觉罗.弟弟";
}
//11、返回#bj的文本值
document.getElementById("btn11").onclick = function () {
//alert(document.getElementById("bj").innerHTML);
alert(document.getElementById("bj").innerText);
}
}
</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 type="radio" name="gender" value="male"/>
Male
<input 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的vaule属性</button></div>
<div><button id="btn10">设置#username的value属性值</button></div>
<div><button id="btn11">返回#bj的文本值</button></div>
</div>
</body>
</html>
#total{
width: 500px;
height: 600px;
/*border: 1px solid black;*/
float: left;
position: absolute;
left: 0px;
top: 10px;
margin-left: 50px;
}
p{
position: relative;
left: 20px;
}
#city ul{
list-style: none;
margin-left: 20px;
width: 200px;
}
#city li{
text-align: center;
padding-top: 3px;
display: block;
width: 40px;
float: left;
border: 1px solid black;
margin-left: 10px;
background-color: chartreuse;
}
#game ul{
list-style: none;
margin-left: 30px;
width: 200px;
}
#game li{
text-align: center;
padding-top: 3px;
display: block;
width: 67px;
float: left;
border: 1px solid black;
margin-left: 10px;
background-color: chartreuse;
}
#phone ul{
list-style: none;
margin-left: 30px;
width: 300px;
}
#phone li{
text-align: center;
padding-top: 3px;
display: block;
width: 120px;
float: left;
border: 1px solid black;
margin-left: 10px;
background-color: chartreuse;
}
.inner{
width: 480px;
float: left;
border: 1px solid black;
margin-top: 30px;
padding-left: 20px;
padding-bottom: 20px;
padding-top: 20px;
}
#btnList{
left: 600px;
top: 10px;
position: absolute;
float: left;
margin-top: 25px;
}
#btn01,#btn02,#btn03,#btn04,#btn05,#btn06,#btn07,#btn08,#btn09,#btn10,#btn11{
width: 300px;
height: 25px;
margin-top: 10px;
background-color: azure;
font-family: 华文仿宋;
font-weight: bolder;
}