Java Web(1)-JavaScript

一、JavaScript 和 html 代码的结合方式

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. 第二种方式

使用 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 全称是:NotaNumber。非数字。非数值

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 i = 12; 
            // typeof() 是 JavaScript 语 言 提 供 的 一 个 函 数 。 
            // alert( typeof(i) ); // number
			i = "abc"; 
            // 它 可 以 取 变 量 的 数 据 类 型 返 回 // alert( typeof(i) ); 
            // String
			var a = 12; var b = "abc";
		alert( a * b ); // NaN是 非 数 字 , 非 数 值 。
            
</script>  
</head> 
<body>
</body>
</html>

三、常见运算

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>

2. 逻辑运算

  • 且运算: &&、
  • 或运算:|| 、
  • 取反运算: !

在 JavaScript 语言中,所有的变量,都可以做为一个 boolean 类型的变量去使用。
0 、null、 undefined、””(空串) 都认为是 false;
注意:

  • && 且运算。 有两种情况: 第一种:当表达式全为真的时候。返回最后一个表达式的值。 第二种:当表达式中,有一个为假的时候。返回第一个为假的表达式的值
  • || 或运算 第一种情况:当表达式全为假时,返回最后一个表达式的值 第二种情况:只要有一个表达式为真。就会把回第一个为真的表达式的值
  • 并且 && 与运算 和 ||或运算 有短路。 短路就是说,当这个&&或||运算有结果了之后 。后面的表达式不再执行 */
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script type="text/javascript">
		 var a = 0; 
             if (a) { 
            	alert(" 零 为 真 "); 
           	 } else {
				alert(" 零 为 假 "); 
             }
		var b = null; 
             if (b) { 
                 alert("null为 真 ");
			 } else { 
             alert("null为 假 ");
			 }
 		var c = undefined;  
            if (c) {  
                alert("undefined为 真 ");
			} else { 
                alert("undefined为 假 ");
			}
		var d = ""; 
            if (d) {  
                alert(" 空 串 为 真 "); 
            } else { 
                alert(" 空 串 为 假 ");  
            }

			var a = "abc"; 
            var b = true; 
            var d = false; 
            var c = null;
			alert( a && b );//true 
            alert( b && a );//true
            alert( a && d ); // false 
            alert( a && c ); // null
            
		   alert( d || c ); // null 
            alert( c|| d ); //false
		   alert( a || c ); //abc 
            alert( b || c ); //true
	</script> 
</head> 
	<body>
	</body> 
</html>

四、数组

1. 数组定义方式

  • var 数组名 =[]; //空数组
  • var 数组名 =[1,’abc’,true]; // 定义数组同时赋值元素
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script type="text/javascript">
		var arr = [true,1]; //定 义 数 组 
         // alert( arr.length ); // 2
		arr[0] = 12; 
         // alert( arr[0] );//12 
        
// javaScript语 言 中 的 数 组 , 只 要 我 们 通 过 数 组 下 标 赋 值 , 那 么 最 大 的 下 标 值 , 就 会 自 动 的 给 数 组 做 扩 容 操 作 。 
            arr[2] = "abc"; 
            alert(arr.length); //3
			// alert(arr[1]);// undefined 
            // 数 组 的 遍 历 
            for (var i = 0; i < arr.length; i++){ 
                alert(arr[i]); 
            }
</script> </head>
<body>
</body> </html>

五、函数

函数的二种定义方式

1. 第一种定义方式

可以使用 function 关键字来定义函数

function 函数名(形参列表){

函数体

}
在 JavaScript 语言中,如何定义带有返回值的函数? 只需要在函数体内直接使用 return 语句返回值即可!

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script type="text/javascript"> 
            // 定 义 一 个 无 参 函 数 
            function fun(){ 
                alert("无参函数 fun()被调用了");
            } 
            // 函 数 调 用 === 才 会 执 行
            fun();
            
		   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(100,50) );
</script> </head> <body>
</body> </html>

2. 第二种定义方式

var 函数名 =function(形参列表){

函数体

}

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script type="text/javascript"> 
            var fun = function () { 
                alert("无参函数");
            }  
            fun();

            var fun2 = function (a,b) { 
                alert("有参函数 a=" + a + ",b=" + b); 
            } 
            fun2(1,2);
            
		    var fun3 = function (num1,num2) { 
                return num1 + num2; 
            }
			alert( fun3(100,200) ); 
        </script>
</head> 
    <body>
	</body> 
</html>

注意:在 Java 中函数允许重载。但是在 JS 中函数的重载会直接覆盖掉上一次的定义

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script type="text/javascript">
		function fun() { 
            alert("无参函数 fun()"); 
        }
		function fun(a,b) { 
            alert("有参函数 fun(a,b)"); 
        }
            
		fun();
	</script> 
</head> 
    <body>
	</body> 
</html>

3. 函数的 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"> 
            function fun(a) { 
                alert( arguments.length );// 可 看 参 数 个 数
			   alert( arguments[0] ); 
                alert( arguments[1] ); 
                alert( arguments[2] );
			   alert("a = " + a);
                
			   for (var i = 0; i < arguments.length; i++){ 
                   alert( arguments[i] ); 
               }
			alert("无参函数 fun()");
		} 
            fun(1,"ad",true);
//需 求 : 要 求 编 写 一 个 函 数 。 用 于 计 算 所 有 参 数 相 加 的 和 并 返 回 
            function sum(num1,num2) { 
                var result = 0; 
                for (var i = 0; i < arguments.length; i++) {
                    if (typeof(arguments[i]) == "number") { 
                        result += arguments[i]; } 
                	} 
                	return result; 
            	}
			alert( sum(1,2,3,4,"abc",5,6,7,8,9) );
	</script> 
</head> 
 <body>
</body> 
</html>

六、JS 中的自定义对象

1. Object 形式的自定义对象

对象的定义:

​ var 变量名 =newObject(); // 对象实例(空对象)

​ 变量名.属性名 = 值; // 定义一个属性

变量名.函数名 =function(){} // 定义一个函数

对象的访问:

​ 变量名.属性 / 函数名();

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">

        var obj = new Object();
        obj.name = "马达";
        obj.age = 18;
        obj.fun = function () {
            alert("姓名:" + this.name + " , 年龄:" + this.age);
        }

        // 对象的访问
        // alert(obj.name);
        obj.fun();
    </script>
</head>
<body>
</body>
</html>

2. {}花括号形式的自定义对象

对象的定义:

​ var 变量名 ={ // 空对象

​ 属性名:值, // 定义一个属性

​ 属性名:值, // 定义一个属性

​ 函数名:function(){} // 定义一个函数

};

对象的访问:

​ 变量名.属性 / 函数名();

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var obj = {
            name: "马达",
            age: 18,
            fun: function () {
                alert("姓名:" + this.name + " , 年龄:" + this.age);
            }
        };

        // alert(obj.name);
        obj.fun();
    </script>
</head>
<body>
</body>
</html>

七、JS中的事件

什么是事件?事件是电脑输入设备与页面进行交互的响应,称之为事件

1. 常用的事件

  • onload 加载完成事件: 页面加载完成之后,常用于做页面 js 代码初始化操作
  • onclick 单击事件: 常用于按钮的点击响应操作
  • onblur失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法
  • onchange内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作
  • onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法

事件的注册又分为静态注册和动态注册两种

什么是事件的注册(绑定)?

其实就是告诉浏览器,当事件响应后要执行哪些操作代码,叫事件注册或事件绑定。

2. 静态注册事件

通过 html 标签的事件属性直接赋于事件响应后的代码,这种方式我们叫静态注册

3. 动态注册事件

是指先通过 js 代码得到标签的 dom 对象,然后再通过 dom对象.事件名 =function(){} 这种形式赋于事件
响应后的代码,叫动态注册

动态注册基本步骤:

  • 获取标签对象
  • 标签对象.事件名 =fucntion(){}

4. onload 加载完成事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        // function onLoadFun() {
        //     alert("静态注册onload事件");
        // }

        
        // 这个是动态注册,固定的写法
        window.onload = function () {
            alert("动态注册onload事件");
        }


    </script>
</head>

<!--静态注册onload事件,这个事件是在浏览器解析完页面之后自动触发的事件,里面自定义的函数
<body onload="onLoadFun()">

-->

</body>
</html>

5. onclick 单击事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        // function onclickFun() {
        //     alert("静态注册onclick事件");
        // }

        // 动态注册
        window.onload = function () {
            // 1. 获取标签对象
            // document是JS语言提供的一个对象
            // 通过属性的id来获取标签对象
            var b = document.getElementById("b01");
            // alert(b);
            
            // 2. 通过标签对象.事件名 =  function (){}
            b.onclick = function () {
                alert("动态注册onclick事件");
            }
        }
        
    </script>
</head>
<body>

<!-- 静态注册onclick-->
    <button onclick="onclickFun();">按钮1</button>
    <button id="b01">按钮2</button>
</body>
</html>

6. 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("静态注册失去焦点事件");
        }


        // 动态注册
        window.onload = function () {
            //1 获 取 标 签 对 象
            var passwordObj = document.getElementById("password");
            // alert(passwordObj);
            // 2 通 过 标 签 对 象 . 事 件 名 = function(){};
            passwordObj.onblur = function () {
                console.log("动态注册失去焦点事件");
            }
        }
    </script>
</head>
<body>
    用户名:<input type="text" onblur="onblurFun();"><br/>
    密码:<input id="password" type="text"><br/>
</body>
</html>

7. onchange内容发生改变事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        function onchangeFun() {
            alert("电影改变");
        }

        window.onload = function () {
            var sObj = document.getElementById("s01");
            sObj.onchange = function () {
                alert("书籍已经改变");
            }
        }

    </script>
</head>
<body>

    <!--静态注册事件-->
    请选择你喜欢看的电影
    <select onchange="onchangeFun();">
        <option>--电影--</option>
        <option>盗墓笔记</option>
        <option>黑客帝国</option>
        <option>千与千寻</option>
    </select>

    <br>
    请选择你喜欢看的书籍
    <select id="s01">
        <option>--书籍--</option>
        <option>平凡的世界</option>
        <option>小王子</option>
        <option>解忧杂货店</option>
    </select>

</body>
</html>

8. onsubmit 表单提交事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        // 静态注册表单提交事务
        function onsubmitFun() {
            alert("提交不合法");

            return false;
        }

        // 动态注册表单提交事务
        window.onload = function () {
            var formObj = document.getElementById("form01");
            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 全称是 DocumentObjectModel 文档对象模型
就是把文档中的标签,属性,文本,转换成为对象来管理。 那么 它们是如何实现把标签,属性,文本转换成为对象来管理呢

1. Document 对象

Document 对象的理解:

  • Document 它管理了所有的 HTML 文档内容
  • document 它是一种树结构的文档,有层级关系
  • 它让我们把所有的标签 都 对象化
  • 我们可以通过 document 访问所有的标签对象

2. Document 对象中的方法介绍

  • document.getElementById(elementId) 通过标签的 id 属性查找标签 dom 对象,elementId 是标签的 id 属性值
  • document.getElementsByName(elementName) 通过标签的 name 属性查找标签 dom 对象,elementName 标签的 name 属性值
  • document.getElementsByTagName(tagname) 通过标签名查找标签 dom 对象。tagname 是标签名
  • document.createElement( tagName) 方法,通过给定的标签名,创建一个标签对象。tagName 是要创建的标签名

注意:

document 对象的三个查询方法,如果有 id 属性,

优先使用 getElementById 方法来进行查询 如果没有 id 属性,则优先使用 getElementsByName 方法来进行查询 如果 id 属性和 name 属性都没有最后再按标签名查 getElementsByTagName
以上三个方法,一定要在页面加载完成之后执行,才能查询到标签对象

3. getElementById 方法

需 求 : 当用户点击了校验按 钮 , 要 获 取 输 出 框 中 的 内 容 。 然 后 验 证 其 是 否 合 法 。

验 证 的 规 则 是 : 必 须 由 字 母、数 字、下 划 线 组 成 。 并 且 长 度 是 5 到 12 位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        
        function onClick() {
            // 1 当我们要 操 作 一 个 标 签 的 时 候 , 一 定 要 先 获 取 这 个 标 签 对 象 。
            var usernameObj = document.getElementById("username");
            // [object HTMLInputElement] 就是dom对象
            var usernameText = usernameObj.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 = "用户名合法!";
            }else{
                alert("用户名不合法");
                usernameSpanObj.innerHTML = "用户名不合法!";
            }
        }
    </script>
</head>
<body>
    用户名:<input type="text" id="username" value="md">
    <span id="usernameSpan" style="color: red;">
        
    </span>

    <button onclick="onClick()">校验</button>
</body>
</html>

4. getElementsByName 方法

让 所 有 复 选 框 都 选 中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">

        function checkAll() {
            // document.getElementsByName("hobby"),是根据指定的name来查询返回多个标签对象集合
            // 这个集合的操作和数组一样,集合中每个元素都是dom对象
            // 这个集合中元素的顺序是按照html页面的上下顺序
            var hobbies = document.getElementsByName("hobby");
            // checked表示复选框的选中状态,选中是true
            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;
            }
        }
    </script>
</head>
<body>

    兴趣爱好:
    <input type="checkbox" name="hobby" value="c" checked="checked"> C
    <input type="checkbox" name="hobby" value="java"> Java
    <input type="checkbox" name="hobby" value="python"> Python

    <br>

    <button onclick="checkAll()">全选</button>
    <button onclick="checkNo()">全部选</button>
    <button onclick="checkReverse()">反选</button>

</body>
</html>

5. 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 hobbies = document.getElementsByTagName("input");

            for (var i = 0; i < hobbies.length; i++){
                hobbies[i].checked = true;
            }
        }


    </script>
</head>
<body>

    兴趣爱好:
    <input type="checkbox" name="hobby" value="c" checked="checked"> C
    <input type="checkbox" name="hobby" value="java"> Java
    <input type="checkbox" name="hobby" value="python"> Python

    <br>

    <button onclick="checkAll()">全选</button>


</body>
</html>

6. createElement 方法

使用js代码来创建html标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">

        window.onload = function () {
            // 在内存中有<div> </div>
            var divObj = document.createElement("div");

            // 有一个文本节点对象 你好,山丘
            var textNodeObj = document.createTextNode("你好,山丘");

            // <div>你好,山丘 </div>
            divObj.appendChild(textNodeObj);

            // 添加子元素,在body里
            document.body.appendChild(divObj);
        }

    </script>
</head>
<body>

</body>
</html>

7. 节点常用的属性和方法

方法:

  • 通过具体的元素节点调用 getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点
  • appendChild(ChildNode) 方法,可以添加一个子节点,ChildNode 是要添加的孩子节点

属性:

  • childNodes 属性,获取当前节点的所有子节点
  • firstChild 属性,获取当前节点的第一个子节点 ,会匹配换行和空格信息 ,使用firstElementChild 则不会匹配换行和空格信息,其他的类似
  • lastChild 属性,获取当前节点的最后一个子节点
  • parentNode 属性,获取当前节点的父节点
  • nextSibling 属性,获取当前节点的下一个节点
  • previousSibling 属性,获取当前节点的上一个节点,previousElementSibling这个不包括换行和空格
  • className 用于获取或设置标签的 class 属性值
  • innerHTML 属性,表示获取/设置起始标签和结束标签中的内容
  • innerText 属性,表示获取/设置起始标签和结束标签中的文本

8. DOM练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">

        window.onload = function () {
            // 1. 查找#bj节点
            document.getElementById("b01").onclick = function () {
                var bjObj = document.getElementById("bj");
                alert(bjObj.innerHTML);
            };

            // 2. 查找所有 li 节点
            var but02Ele = document.getElementById("b02");
            but02Ele.onclick = function () {
                var lis = document.getElementsByTagName("li");
                alert(lis.length);
            };
            // 3. 查找 name=gender 的所有节点
            var but03Ele = document.getElementById("b03");
            but03Ele.onclick = function () {
                var genders = document.getElementsByName("gender");
                alert(genders.length);
            };



            // 4. 查找#city 下所有 li 节点
            var but04Ele = document.getElementById("b04");
            but04Ele.onclick = function () {
               var lis = document.getElementById("city").getElementsByTagName("li");
               alert(lis.length);
            };

            // 5. 返回#city 的所有子节点
            var but05Ele = document.getElementById("b05");
            but05Ele.onclick = function () {
               var obj = document.getElementById("city").childNodes;
               console.log(obj.length);
               for (var i = 0; i < obj.length; i++){
                   console.log(obj[i]);
               }
            };

            // 6. 返回#phone 的第一个子节点
            var but06Ele = document.getElementById("b06");
            but06Ele.onclick = function () {
                var objphone = document.getElementById("phone").firstElementChild;
                alert(objphone.innerHTML);

            };

            // 7. 返回#bj 的父节点
            var but07Ele = document.getElementById("b07");
            but07Ele.onclick = function () {
                var objbj = document.getElementById("bj").parentNode;
                alert(objbj.innerHTML);
            };

            // 8. 返回#ML 的前一个兄弟节点
            var but08Ele = document.getElementById("b08");
            but08Ele.onclick = function () {
                alert(document.getElementById("ML").previousElementSibling.innerHTML);
            };

            // 9. 返回#username 的 value 属性值
            var but09Ele = document.getElementById("b09");
            but09Ele.onclick = function () {
                alert(document.getElementById("username").value);
            };

            // 10. 设置#username 的 value 属性值
            var but10Ele = document.getElementById("b10");
            but10Ele.onclick = function () {
                document.getElementById("username").value = "山丘";
            };

            // 11. 返回#city 的文本值
            var but11Ele = document.getElementById("b11");
            but11Ele.onclick = function () {
                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>

            <p>
                你喜欢那款游戏?
            </p>

            <ul id="game">
                <li id="wz">王者荣耀</li>
                <li>飞车</li>
                <li>联盟</li>
                <li>DNF</li>
            </ul>

            <br>

            <p>
                你的手机是什么品牌?
            </p>

            <ul id="phone">
                <li>华为</li>
                <li id="ML">小米</li>
                <li>oppo</li>
                <li>一加</li>
            </ul>
        </div>


        <div class="inner">
            gender:
            <input type="radio" name="gender" value="male">
            Male
            <input type="radio" name="gender" value="female">
            Female

            <br>
            name:
            <input type="text" name="name" id="username" value="md">
        </div>
    </div>

    <div id="btuList">
        <div><button id="b01">查找#bj节点</button></div>
        <div><button id="b02">查找所有 li 节点</button></div>
        <div><button id="b03">查找 name=gender 的所有节点</button></div>
        <div><button id="b04">查找#city 下所有 li 节点</button></div>
        <div><button id="b05">返回#city 的所有子节点</button></div>
        <div><button id="b06">返回#phone 的第一个子节点</button></div>
        <div><button id="b07">返回#bj 的父节点</button></div>
        <div><button id="b08">返回#android 的前一个兄弟节点</button></div>
        <div><button id="b09">返回#username 的 value 属性值</button></div>
        <div><button id="b10">设置#username 的 value 属性值</button></div>
        <div><button id="b11">返回#city 的文本值</button></div>
    </div>
</body>
</html>
posted @ 2020-07-22 22:03  达达i  阅读(394)  评论(0编辑  收藏  举报