一、JavaScript 介绍
Javascript 语言诞生主要是完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解析执行 JavaScript 代码。
特点:
- 交互性(它可以做的就是信息的动态交互)
- 安全性(不允许直接访问本地硬盘)
- 跨平台性(只要是可以解释JS的浏览器都可以执行,和平台无关)
JavaScript与Java的区别:
- JavaScript的程序代码直接嵌入HTML文件中;而Java程序代码写在Java源文件中;
- JavaScript是弱类型语言,比如在使用变量前可以不声明变量而直接使用;Java是强制类型语言,比如在使用变量前必须先声明变量;
- JavaScript的程序代码由客户端浏览器解释、执行;Java程序则必须先编译成class文件再由JVM执行
二、JavaScript 和 html 代码的结合方式
2.1 第一种方式
- 只需要在 head 标签中,或者在 body 标签中,使用 script 标签来书写 JavaScript 代码
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
// alert是JavaScript语言提供的一个警告框函数。
// 它可以接收任意类型的参数,这个参数就是警告框的提示信息
alert("hello javaScript!");
</script>
</head>
<body>
</body>
</html>
2.2 第二种方式
-
使用 script 标签引入单独的 JavaScript 代码文件
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- 现在需要使用script引入外部的js文件来执行 src 属性专门用来引入js文件路径(可以是相对路径,也可以是绝对路径) script标签可以用来定义js代码,也可以用来引入js文件 但是,两个功能二选一使用。不能同时使用两个功能 --> <script type="text/javascript" src="1.js"></script> <script type="text/javascript"> alert("国哥现在可以帅了"); </script> </head> <body> </body> </html>
三、变量
-
什么是变量?变量是可以存放某些值的内存的命名。
-
JavaScript 的变量类型:
-
数值类型: number 字符串类型: string 对象类型: object 布尔类型: boolean 函数类型: function
-
JavaScript 里特殊的值:
undefined 未定义,所有js变量未赋于初始值的时候,默认值都是undefined. null 空值 NaN 全称是:Not a Number。非数字。非数值。
-
JS 中的定义变量格式:
var 变量名; var 变量名 = 值;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var i; alert(i);//undefined // typeof() 是 JavaScript 语言提供的一个函数。 // 它可以取变量的数据类型返回 alert(typeof(i));//undefined i = "abc"; alert(typeof(i));//string i = 12; alert(i);//12 alert( typeof(i) ); // number var a = 12; var b = "abc"; alert(a*b);//NaN </script> </head> <body> </body> </html>
四、运算符
4.1 关系(比较)运算符
-
等于: == 等于是简单的做字面值的比较
-
全等于: === 除了做字面值的比较之外,还会比较两个变量的数据类型
示例代码: -
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var a = "12"; var b = 12; alert(a == b);//true: == 等于是简单的做字面值的比较 alert(a === b);//false: === 除了做字面值的比较之外,还会比较两个变量的数据类型 </script> </head> <body> </body> </html>
4.2 逻辑运算符
-
且运算: && 或运算: || 取反运算: !
-
在 JavaScript 语言中,所有的变量,都可以做为一个 boolean 类型的变量去使用。
0 、null、 undefined、””(空串) 都认为是 false; -
&& 且运算:
有两种情况:
第一种:当表达式全为真的时候。返回最后一个表达式的值。
第二种:当表达式中,有一个为假的时候。返回第一个为假的表达式的值|| 或运算:
第一种情况:当表达式全为假时,返回最后一个表达式的值
第二种情况:只要有一个表达式为真。就会把回第一个为真的表达式的值并且 && 与运算 和 ||或运算 有短路。
短路就是说,当这个&&或||运算有结果了之后 。后面的表达式不再执行 -
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> /* 在JavaScript语言中,所有的变量,都可以做为一个boolean类型的变量去使用。 0 、null、 undefined、””(空串) 都认为是 false; */ if(0 || null || undefined || ""){ }else{ alert("0 、null、 undefined、””(空串) 都认为是 false"); } /* && 且运算。 有两种情况: 第一种:当表达式全为真的时候。返回最后一个表达式的值。 第二种:当表达式中,有一个为假的时候。返回第一个为假的表达式的值 */ var a = "abc"; var b = true; var d = false; var c = null; alert(a && b);//true alert(b && a);//abc alert(a && d);//false alert(a && c);//null alert(a && d && c);//false /* || 或运算 第一种情况:当表达式全为假时,返回最后一个表达式的值 第二种情况:只要有一个表达式为真。就会把回第一个为真的表达式的值 */ alert(d || c);//false alert(c || d);//null alert(a || c);//abc alert(b || c);//true </script> </head> <body> </body> </html>
五、数组
JS中数组的格式:
var 数组名 = []; // 空数组
var 数组名 = [1 , ’abc’ , true]; // 定义数组同时赋值元素
-
javaScript语言中的数组,只要我们通过数组下标赋值,那么最大的下标值,就会自动的给数组做扩容操作
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var arr1 = [];//定义一个空数组 var arr2 = [true,1];//定义数组的同时赋值元素 alert(arr1.length);//0 arr1[0] = 12; alert(arr1[0]); alert(arr1.length);//1 //javaScript语言中的数组,只要我们通过数组下标赋值,那么最大的下标值,就会自动的给数组做扩容操作 arr1[2] = "abc"; alert(arr1[2]);//abc alert(arr1.length);//3 alert(arr1[1]);//undefined //数组的遍历 for(var i = 0;i<arr1.length;i++){ alert(arr1[i]); } </script> </head> <body> </body> </html>
六、函数
6.1 函数的二种定义方式
6.1.1 方式一
-
使用 function 关键字来定义函数。
使用的格式如下:function 函数名(形参列表){ 函数体 }
-
在 JavaScript 语言中,如何定义带有返回值的函数?
只需要在函数体内直接使用 return 语句返回值即可! -
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> //定义一个无参函数 function fun1(){ alert("无参函数fun()被调用了"); } //函数调用 fun1(); //定义一个带参函数 function fun2(a,b){ alert("有参函数fun2()被调用了a=>"+a+",b=>"+b); } //函数调用 fun2(12,"abc"); //定义带有返回值的函数 function sum(num1,num2){ var result = num1+num2; return result; } alert(sum(2,3));//5 </script> </head> <body> </body> </html>
6.1.2 方式二
-
函数的第二种定义方式,格式如下:
var 函数名 = function(形参列表) { 函数体 }
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var fun1 = function(){ alert("无参函数"); } fun1(); var fun2 = function(a,b){ alert("有参函数a="+a+",b="+b); } fun2(1,"abc"); var fun3 = function(num1,num2){ return num1+num2; } alert(fun3(100,30));//130 //注:在 Java 中函数允许重载。但是在 JS 中函数的重载会直接覆盖掉上一次的定义 </script> </head> <body> </body> </html>
-
注:在Java中函数允许重载。但是在JS中函数的重载会直接覆盖掉上一次的定义
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> //注:在 Java 中函数允许重载。但是在 JS 中函数的重载会直接覆盖掉上一次的定义 function fun(a,b){ alert("有参函数fun(a,b)"); } function fun(){//无参函数将覆盖有参函数 alert("无参函数fun()"); } fun(1,"abc");//执行结果:无参函数fun() </script> </head> <body> </body> </html>
6.2 函数的 arguments 隐形参数(只在function函数内)
-
就是在 function 函数中不需要定义,但却可以直接用来获取所有参数的变量。我们管它叫隐形参数。
-
隐形参数特别像 java 基础的可变长参数一样。
public void fun( Object … args ); 可变长参其实是一个数组。
那么 js 中的隐形参数也跟 java 的可变长参数一样。操作类似数组。 -
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> //函数的 arguments 隐形参数 function fun(a){ alert(arguments);//[object Arguments] alert(arguments.length);//3,查看参数个数 alert(arguments[0]);//1 alert(a);//1,arguments[0]===a alert(arguments[1]);//ab alert(arguments[2]);//true //遍历arguments for(var i = 0;i<arguments.length;i++){ alert(arguments[i]); } } //函数调用 fun(1,"ab",true); </script> </head> <body> </body> </html>
七、JS 中的自定义对象
7.1 Object 形式的自定义对象
-
对象的定义:
var 变量名 = new Object(); // 对象实例(空对象) 变量名.属性名 = 值; // 定义一个属性 变量名.函数名 = function(){} // 定义一个函数
-
对象的访问:
变量名.属性 / 函数名();
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javaScript"> // 对象的定义: // var 变量名 = new Object(); // 对象实例(空对象) // 变量名.属性名 = 值; // 定义一个属性 // 变量名.函数名 = function(){} // 定义一个函数 var obj = new Object(); obj.name = "华仔"; obj.age = 18; obj.fun = function(){ alert("姓名:"+this.name+",年龄:"+this.age); } // 对象的访问: // 变量名.属性 / 函数名(); alert(obj);//[object Object] alert(obj.age);//访问对象的属性 obj.fun();//访问对象的函数 </script> </head> <body> </body> </html>
7.2 {}花括号形式的自定义对象
对象的定义:
var 变量名 = { // 空对象
属性名:值, // 定义一个属性
属性名:值, // 定义一个属性
函数名:function(){} // 定义一个函数
};
对象的访问:
变量名.属性 / 函数名();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
// 对象的定义:
// var 变量名 = { // 空对象
// 属性名:值, // 定义一个属性
// 属性名:值, // 定义一个属性
// 函数名:function(){} // 定义一个函数
// };
var obj = {
name:"国哥",
age:18,
fun : function () {
alert("姓名:" + this.name + " , 年龄:" + this.age);
}
};
// 对象的访问:
// 变量名.属性 / 函数名();
alert(obj.name);
obj.fun();
</script>
</head>
<body>
</body>
</html>
八、js 中的事件
-
什么是事件?事件是电脑输入设备与页面进行交互的响应。我们称之为事件。
-
常用的事件:
onload 加载完成事件: 页面加载完成之后,常用于做页面 js 代码初始化操作 onclick 单击事件: 常用于按钮的点击响应操作。 onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。 onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作 onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法。
-
事件的注册又分为静态注册和动态注册两种:
-
什么是事件的注册(绑定)?
其实就是告诉浏览器,当事件响应后要执行哪些操作代码,叫事件注册或事件绑定。 -
静态注册事件:通过 html 标签的事件属性直接赋于事件响应后的代码,这种方式我们叫静态注册。
-
动态注册事件:是指先通过 js 代码得到标签的 dom 对象,然后再通过 dom 对象.事件名 = function(){} 这种形式赋于事件响应后的代码,叫动态注册。动态注册基本步骤:
1、 获取标签对象 2、 标签对象.事件名 = fucntion(){}
-
-
onload加载完成事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javaScript"> var onloadFun = function(){ alert("静态注册onload事件,所有代码"); } //onload事件动态注册,是固定写法 //文档加载完成时执行 window.onload = function(){ alert("动态注册的onload事件"); } </script> </head> <!--静态注册onload事件 onload 事件是浏览器解析完页面之后就会自动触发的事件 onload 通常用于 <body> 元素,在页面完全载入后(包括图片、css文件等等。)执行脚本代码 --> <body onload="onloadFun();"> </body> </html>
-
onclick 单击事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var onclickFun = function(){ alert("静态注册onclick事件"); } window.onload = function () { // 1 获取标签对象 /* * document 是JavaScript语言提供的一个对象(文档)<br/> * get 获取 * Element 元素(就是标签) * By 通过。。 由。。经。。。 * Id id属性 * * getElementById通过id属性获取标签对象 **/ var btnObj = document.getElementById("btn01"); alert( btnObj );//[object HTMLButtonElement] // 2 通过标签对象.事件名 = function(){} btnObj.onclick = function () { alert("动态注册的onclick事件"); } } </script> </head> <body> <!--静态注册onclick事件--> <button onclick="onclickFun();">按钮1</button> <button id="btn01">按钮2</button> </body> </html>
-
onblur 失去焦点事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> function onblurFun(){ // console是控制台对象,是由JavaScript语言提供,专门用来向浏览器的控制器打印输出, 用于测试使用 // log() 是打印的方法 console.log("静态注册失去焦点事件"); } // 动态注册 onblur事件 window.onload = function(){ //1 获取标签对象 var passwordObj = document.getElementById("password"); alert(passwordObj);//[object HTMLInputElement] //2 通过标签对象.事件名 = function(){}; passwordObj.onblur = function(){ console.log("动态注册失去焦点事件"); } } </script> </head> <body> <input type="text" value="姓名" onblur="onblurFun();"/><br/> <input type="password" value="密码" id="password"/> </body> </html>
-
onsubmit 表单提交事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> // 静态注册表单提交事务 var onsubmitFun = function(){ // 要验证所有表单项是否合法,如果,有一个不合法就阻止表单提交 alert("静态注册表单提交事件----发现不合法"); return flase; } window.onload = function(){ //1 获取标签对象 var formObj = document.getElementById("form01"); //2 通过标签对象.事件名 = function() formObj.onsubmit = function(){ alert("动态注册表单提交事件----发现不合法"); return false; } } </script> </head> <body> <!--return false 可以组织表单提交--> <form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun();" > <input type="submit" value="静态注册"/> </form> <form action="http://localhost:8080" id="form01"> <input type="submit" value="动态注册"/> </form> </body> </html>
十、DOM 模型
DOM 全称是 Document Object Model 文档对象模型,通过它,我们可以访问HTML文档对象属性、方法、事件,还可以对其进行操作。
10.1 节点
在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。
- 节点Node,是构成我们网页的最基本的组成部分,网页中的每一个部分都可以称为是一个节点。
- 比如:html标签、属性、文本、注释、整个文档等都是一个节点。
- 虽然都是节点,但是实际上他们的具体类型是不同的。
- 比如:标签我们称为元素节点;属性称为属性节点;文本称为文本节点;文档称为文档节点。
- 节点的类型不同,属性和方法也都不尽相同。
- 节点:Node——构成HTML文档最基本的单元。
- 常用节点分为四类
- 文档节点:整个HTML文档
- 元素节点:HTML文档中的HTML标签
- 属性节点:元素的属性
- 文本节点:HTML标签中的文本内容
-
文档节点(document)
- 文档节点document,代表的是整个HTML文档,网页中的所有节点都是它的子节点。
- document对象作为window对象的属性存在的,我们不用获取可以直接使用。
- 通过该对象我们可以在整个文档访问内查找节点对象,并可以通过该对象创建各种节点对象。
-
元素节点(Element)
- HTML中的各种标签都是元素节点,这也是我们最常用的一个节点。
- 浏览器会将页面中所有的标签都转换为一个元素节点,我们可以通过document的方法来获取元素节点。
- 比如:document.getElementById() // 根据id属性值获取一个元素节点对象
-
文本节点(Text)
- 文本节点表示的是HTML标签以外的文本内容,任意非HTML的文本都是文本节点。
- 它包括可以字面解释的纯文本内容。
- 文本节点一般是作为元素节点的子节点存在的。
- 获取文本节点时,一般先要获取元素节点。在通过元素节点获取文本节点。
- 例如:元素节点.firstChild; // 获取元素节点的第一个子节点,一般为文本节点。
-
属性节点(Attr)
- 属性节点表示的是标签中的一个一个的属性,这里要注意的是属性节点并非是元素节点的子节点,而是元素节点的一部分。
- 可以通过元素节点来获取指定的属性节点。
- 例如:元素节点.getAttributeNode(“属性名”);
- 注意:我们一般不使用属性节点。
10.2 节点相关的属性和方法
-
获取元素节点(document对象调用)
通过document对象调用
- getElementById():通过id属性获取一个元素节点对象
- getElementsByTagName():通过标签名获取一组元素节点对象
- getElementsByName():通过name属性获取一组元素节点对象
补充:
1. document.createElement( tagName):通过给定的标签名,创建一个标签对象。tagName 是要创建的标签名
-
getElementById方法示例代码:(两种常见的验证提示效果)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> /* * 需求:当用户点击了较验按钮,要获取输出框中的内容。然后验证其是否合法。<br/> * 验证的规则是:必须由字母,数字。下划线组成。并且长度是5到12位。 * */ function onclickFun(){ // 1 当我们要操作一个标签的时候,一定要先获取这个标签对象。 var usernameObj = document.getElementById("username"); console.log(usernameObj);// [object HTMLInputElement] 它就是dom对象 var usernameText = usernameObj.value;//获取文本框中的value值 // 如何 验证 字符串,符合某个规则 ,需要使用正则表达式技术 var patt = /^\w{5,12}$/; /* * test()方法用于测试某个字符串,是不是匹配我的规则 , * 匹配就返回true。不匹配就返回false. * */ var usernameSpanObj = document.getElementById("usernameSpan"); // innerHTML 表示起始标签和结束标签中的内容 // innerHTML 这个属性可读,可写 usernameSpanObj.innerHTML = "国哥真可爱!"; if(patt.test(usernameText)){ // alert("用户名合法!"); // usernameSpanObj.innerHTML = "用户名合法!"; usernameSpanObj.innerHTML = "<img src=\"right.png\" height=\"18\" width=\"18\"/>"; }else{ // alert("用户名不合法"); // usernameSpanObj.innerHTML = "用户名不合法!"; usernameSpanObj.innerHTML = "<img src=\"wrong.png\" height=\"18\" width=\"18\"/>"; } } </script> </head> <body> 用户名:<input type="text" id="username"/> <span id="usernameSpan" style="color:red"></span> <button onclick="onclickFun()">校验</button> </body> </html>
-
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);//[object NodeList] // 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="cpp" checked="checked">C++ <input type="checkbox" name="hobby" value="java">Java <input type="checkbox" name="hobby" value="js">JavaScript <br/> <button onclick="checkAll()">全选</button> <button onclick="checkNo()">全不选</button> <button onclick="checkReverse()">反选</button> </body> </html>
-
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="cpp" checked="checked">C++ <input type="checkbox" value="java">Java <input type="checkbox" value="js">JavaScript <br/> <button onclick="checkAll()">全选</button> </body> </html>
-
createElement方法示例代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> // 现在需要我们使用js代码来创建html标签,并显示在页面上 // 标签的内容就是:<div>国哥,我爱你</div> //方法一: window.onload = function(){ var divObj = document.createElement("div"); divObj.innerHTML = "国哥,我爱你"; var bodyObj = document.getElementById("bodyy"); // bodyObj.appendChild(divObj); //或 document.body.appendChild(divObj); } //方法二: window.onload = function(){ var divObj = document.createElement("div"); var textNodeObj = document.createTextNode("国哥,我爱你"); divObj.appendChild(textNodeObj); document.body.appendChild(divObj); } </script> </head> <body id="bodyy"> </body> </html>
-
获取元素节点的子节点
通过具体的元素节点调用
- getElementsByTagName():方法,返回当前节点的指定标签名后代节点
- childNodes:属性,表示当前节点的所有子节点
- firstChild:属性,表示当前节点的第一个子节点
- lastChild:属性,表示当前节点的最后一个子节点
-
获取父节点和兄弟节点
通过具体的节点调用
- parentNode:属性,表示当前节点的父节点
- previousSibling:属性,表示当前节点的前一个兄弟节点
- nextSibling:属性,表示当前节点的后一个兄弟节点
-
元素节点的属性
- 获取,元素对象.属性名。例:element.value、element.id、element.className
- 设置,元素对象.属性名=新的值。例:element.value = “hello”、element.id = “id01”、element.className = “newClass”
-
其他属性
- nodeValue:文本节点可以通过nodeValue属性获取和设置 文本节点的内容
- innerHTML:元素节点通过该属性获取和设置标签内部的 html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dom查询</title>
<link rel="stylesheet" type="text/css" href="style/css.css" />
<script type="text/javascript">
window.onload = function(){
//1.查找#bj节点
document.getElementById("btn01").onclick = function(){
var bjObj = document.getElementById("bj");
alert(bjObj.innerHTML);
}
//2.查找所有li节点
var btn02Ele = document.getElementById("btn02");
btn02Ele.onclick = function(){
var liObjs = document.getElementsByTagName("li");
alert(liObjs.length);
};
//3.查找name=gender的所有节点
var btn03Ele = document.getElementById("btn03");
btn03Ele.onclick = function(){
var genders = document.getElementsByName("gender");
alert(genders.length);
};
//4.查找#city下所有li节点
var btn04Ele = document.getElementById("btn04");
btn04Ele.onclick = function(){
//1 获取id为city的节点
var city = document.getElementById("city");
//2 通过city获取所有子节点
var citylis = city.getElementsByTagName("li");
alert(citylis.length);
};
//5.返回#city的所有子节点
var btn05Ele = document.getElementById("btn05");
btn05Ele.onclick = function(){
//1 获取id为city的节点
var city = document.getElementById("city");
//2 通过city获取所有子节点
alert(city.childNodes.length);//两对标签之间的字符串也算一个节点
};
//6.返回#phone的第一个子节点
var btn06Ele = document.getElementById("btn06");
btn06Ele.onclick = function(){
// 查询id为phone的节点
alert(document.getElementById("phone").firstChild.innerHTML);
};
//7.返回#bj的父节点
var btn07Ele = document.getElementById("btn07");
btn07Ele.onclick = function(){
//1 查询id为bj的节点
//2 bj节点获取父节点
alert(document.getElementById("bj").parentNode.innerHTML);
};
//8.返回#android的前一个兄弟节点
var btn08Ele = document.getElementById("btn08");
btn08Ele.onclick = function(){
alert(document.getElementById("android").previousSibling.innerHTML);
};
//9.读取#username的value属性值
var btn09Ele = document.getElementById("btn09");
btn09Ele.onclick = function(){
alert(document.getElementById("username").value);
};
//10.设置#username的value属性值
var btn10Ele = document.getElementById("btn10");
btn10Ele.onclick = function(){
document.getElementById("username").value = "系统默认值";
};
//11.返回#city的文本值
var btn11Ele = document.getElementById("btn11");
btn11Ele.onclick = function(){
alert(document.getElementById("city").innerHTML);//包括标签
alert(document.getElementById("city").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的value属性值</button></div>
<div><button id="btn10">设置#username的value属性值</button></div>
<div><button id="btn11">返回#city的文本值</button></div>
</div>
</body>
</html>