JavaScript基础笔记总结

  1. 1. 1、什么是 js
  2. 2. 2、js与用户的交互方式
  3. 3. 3、js的组成
  4. 4. 4、变量
    1. 4.1. 4.1、JavaScript 的变量类型
    2. 4.2. 4.2、JavaScript 里特殊的值
    3. 4.3. 4.3、JS中定义变量格式
  5. 5. 5、关系(比较)运算
  6. 6. 6、逻辑运算
  7. 7. 7、数组(重点)
    1. 7.1. 7.1、数组定义方式
  8. 8. 8、函数(重点)
    1. 8.1. 8.1、函数的两种定义方式
    2. 8.2. 8.2、函数的 arguments 隐形参数(只在function函数内)
  9. 9. 9、数值转换字符串
    1. 9.1. 9.1、数值转字符串的实现方式:
    2. 9.2. 9.2、字符串转数值
  10. 10. 10、JS 中的自定义对象(扩展内容)
    1. 10.1. 10.1、Object 形式的自定义对象
    2. 10.2. 10.2、花括号形式的自定义对象
  11. 11. 11、js 中的事件
    1. 11.1. 11.1、什么是事件?
    2. 11.2. 11.2、onload 加载完成事件
    3. 11.3. 11.4、onclik 单击事件
    4. 11.4. 11.5、onblur 失去焦点事件
    5. 11.5. 11.6、onchange 内容发生改变事件
    6. 11.6. 11.7、onsubmit 表单提交事件
  12. 12. 12、正则表达式
  13. 13. 13、DOM 模型
    1. 13.1. 13.1、Document 对象(重点)
    2. 13.2. 13.2、Document 对象的理解:
    3. 13.3. 13.3、Document 对象中的方法介绍(重点)
      1. 13.3.1. 1. document.getElementById 方法代码
      2. 13.3.2. 2. document.getElementsByName 方法代码
      3. 13.3.3. 3. document.getElementsByTagName 方法代码
      4. 13.3.4. 4. document.createElement 方法代码
    4. 13.4. 13.4、节点的常用属性和方法
    5. 13.5. 13.5、DOM 查询练习

1、什么是 js

JS: JavaScript -> java 脚本语言
JavaScript 是网景(Netscape)公司开发的一种基于客户端浏览器、面向(基于)对象、事件驱动式的网页脚本语言。

JS的特点:

  1. 基于客户端浏览器 : js的运行环境是浏览器,无需下载任何jar和插件,浏览器自带对js运行环境的支持
  2. 面向(基于)对象 : js是面向对象的语言 , 我们开发中对js代码的使用 对象.属性 对象.方法()
  3. 事件驱动式 : js是基于事件实现大多数功能的, 什么叫做事件,事件类似于css中的伪类的概念
  4. 脚本语言 : 脚本语言无需编译,可以直接被解释执行,所以源代码可以直接看到

2、js与用户的交互方式

交互方式:
1.警示框
语法:alert(message)
作用:弹出一个警示框,并给出提示信息

2.对话输入框
语法:result prompt(messsge , value)
message:提示信息
value:输入框的默认值
result:返回值,就是用户在输入框输入的内容

注意:
1) 返回值是字符串,如果需要其他数据类型,需要强制类型转换
3) 函数定义了两个输入参数,但是根据需要传入需要的实参,不用的参数可以不传参

3.控制台输入(打印输出语句)
语法:console.log(msg)
作用:在控制台输出信息(可以是字符串,也可以是其他数据类型,包括对象)
注意:该方法一般用于调试程序

4.页面输出(在浏览器网页上打印)
语法:document.write(markup)
作用:向浏览器页面输出内容
注意:主要用于输出html代码字符串

上面将的交互方式都是函数(方法),在面向对象语言中方法一定属于某个对象,正确的调用方式是对象.方法()

在调用alert()或者prompt()函数的时候没有指定对象,是因为这些函数属于window对象

在js中,window对象方法成员可以省略window 类似于window.alert() –> alert()

3、js的组成

js的内容由3部分组成:

  1. ECMAScript : 语法部分,类似于javaSE数组之前的内容,所以最近规范叫做ES6->ECMAScript 6
  2. DOM : document object model 文档对象模型 , 让我们使用js代码去操作页面元素,实现动态添加,删除,修改,获取页面元素
  3. BOM : 浏览器对象模型 , 让我们使用js代码去操作浏览器,上一页,下一页,修改地址栏直接访问页面,刷新页面等等

4、变量

学习一门语言,首先学习语法
语法中学习顺序: 变量 -> 数据类型 ->运算符 ->流程控制语句 ->对象

变量: 内存中划定一块区域,保存值,值可以变化,用来表示这块内存的量就是变量

4.1、JavaScript 的变量类型

  • 数值类型: number
    (包含了java中的整数以及浮点数) 此类型用来表示整数和浮点数(小数)值。
    比如: 数字 10、10.01、100 、 -100 等等都是
    注意: 数值型除了常见的值之外还有一个特殊的值:NaN
  • 字符串类型: string
    (字符串和字符) 此类型用来表示字符串。字符串可以由单引号(‘)或双引号(“)表示
  • 对象类型: object
  • 布尔类型: boolean
  • 函数类型: function

判断数据类型的方式: typeof 运算符

4.2、JavaScript 里特殊的值

    undefined    未定义,所有js变量未赋于初始值的时候,默认值都是undefined
    null         空值
    NAN          全称是:Not a Number。 非数字。非数值。

4.3、JS中定义变量格式

语法:
1. java 声明变量 : 数据类型 变量名 = 初始化值;
2.js 声明变量: var 变量名 = 初始化值;

注意:

  1. 变量可以声明的时候直接进行初始化,也可以先只声明,在使用前进行初始化
  2. 如果变量没有初始化,可以访问值,值是undefined(undefined:只声明没有初始化的状态)
  3. js是弱类型语言,变量声明的时候无需指定数据类型,但是赋值的时候可以指定不同数据类型的值
    原因: java声明变量的时候必须指定数据类型,js声明变量的时候,所有数据类型的内存大小都是2个字节
  4. 变量声明的时候没有指定数据类型,变量的数据类型一直在变化,所以数据类型就是最后一次赋值,值的类型

总结: java中变量一旦声明,值可以变化但是数据类型不可变,js中变量值和数据类型都是可变的

<!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>

5、关系(比较)运算

等于: == 等于是简单的做字面值的比较
全等于: === 除了做字面值的比较之外,还会比较两个变量的数据类型

<!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>

6、逻辑运算

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

在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("0为真")
}else {
alert("0为假")
}

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(a && d && c) //false

/* || 或运算
第一种情况:当表达式全为假时,返回最后一个表达式的值
第二种情况:只要有一个表达式为真。就会把回第一个为真的表达式的值
*/
alert(d || c) // null
alert(c || d) //false
alert(a || c) // abc
</script>
</head>
<body>
</body>
</html>

7、数组(重点)

7.1、数组定义方式

JS 中 数组的定义
格式:
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) // 0

arr[0] = 12;
// alert(arr[0]) //12
// alert(arr.length) // 1
//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>

8、函数(重点)

8.1、函数的两种定义方式

  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(sum1,sum2){
var result = sum1+sum2;
return result;
}
alert(sum(130,20))

</script>
</head>
<body>
</body>
</html>
  1. 第二种定义方式
使用格式:
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(200,300)

var sum = function (sum1,sum2){
return sum1+sum2;
}
alert(sum(160,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>

8.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">
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, "abc", true)

//需求: 要求 编写 一个函数,用于计算所有参数相加的和并返回
function sum(num1,num2){
var result = 0;
for (var i=0;i<arguments.length;i++){
result += arguments[i];
}
return result;
}
alert(sum(1,2,3,"abc",4,5,6,7,8));
</script>
</head>
<body>
</body>
</html>

9、数值转换字符串

浏览器接收的数据和发送的数据都是字符串,所以经常需要将字符串转数值,数值转字符串

9.1、数值转字符串的实现方式:

  1. 隐式转换
    使用运算符进行隐式转换

  2. 显示转换
    使用String()构造函数进行显示转换

9.2、字符串转数值

  1. 隐式转换
    使用运算符进行隐式转换

  2. 显示转换
    使用Number()构造函数进行显示转换

以下值转换布尔 结果为
false、undefined 、null、0、 “” false
true、 1、 “somestring” true

其他数据类型转换为布尔:

  1. !!运算符进行隐式转换
  2. 使用Boolean()构造方法进行显式转换

10、JS 中的自定义对象(扩展内容)

10.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();
alert(typeof (obj))
obj.name="张三";
obj.age=18;
obj.fun=function (){
alert("姓名:"+this.name+"年龄:"+this.age)
}
/*
对象的访问:
变量名.属性 函数名();
*/
alert(obj.name)
obj.fun();
</script>
</head>
<body>
</body>
</html>

10.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>

11、js 中的事件

11.1、什么是事件?

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

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

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

什么是事件的注册(绑定)?
就是告诉浏览器,当事件响应后要执行哪些操作代码,叫事件注册或事件绑定。

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

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

动态注册基本步骤:
1、获取标签对象
2、标签对象.事件名= fucntion(){}

11.2、onload 加载完成事件

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

function onloadFun(){
//onload事件的方法
alert('静态注册onload事件,所有代码')
}

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

</script>
</head>
<!--静态注册onload事件
onload事件是浏览器解析完页面之后就会自动触发的事件

<body onload="onloadFun()">-->
<body>
</body>
</html>

11.4、onclik 单击事件

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onloadFun(){
alert("静态注册onclick");
}
//动态注册onclick事件
window.onload =function (){
// 1.获取标签对象
/*
* document 是JavaScript语言提供的一个对象(文档)
* get 获取
* Element 元素(就是标签)
* By 通过... 由.. 经..
* Id id属性
*
* getElementById 通过id属性获取标签对象
**/
var btnObj = document.getElementById("btn01");
// alert(btnObj)
// 2.通过标签对象.事件名 = function (){}
btnObj.onclick = function (){
alert("动态注册的onclick事件")
}
}

</script>
</head>
<body>
<!--静态注册onclick事件-->
<button onclick="onloadFun()">按钮1</button>
<button id="btn01">按钮2</button>
</body>
</html>

11.5、onblur 失去焦点事件

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//静态注册失去焦点事件
function onblurFun(){
console.log("静态注册失去焦点事件")
}
//动态注册 onblur事件
window.onblur = function (){
//1.获取标签对象
var passOjb = document.getElementById("password")
//2.标签对象.事件名 = function(){}
passOjb.onblur = function (){
console.log("动态注册 onblur事件")
}
}
</script>
</head>
<body>
用户名:<input type="text" onblur="onblurFun()"><br />
密码:<input id="password" type="password">
</body>
</html>

11.6、onchange 内容发生改变事件

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onchangeFun() {
alert("女神已经改变")
}
window.onload = function () {
//1.获取标签对象
var selObj = document.getElementById("sel")
//2.标签对象.事件名 = function(){}
selObj.onchange = function () {
alert("男神已经改变")
}
}
</script>
</head>
<body>
请选择你心中的女神:
<!--静态注册 onchange事件-->
<select onchange="onchangeFun()">
<option>--女神--</option>
<option>芳芳</option>
<option>佳佳</option>
<option>红红</option>
</select>
<br />
请选择你心中的男神:
<!--动态注册 onchange事件-->
<select id="sel">
<option>--男神--</option>
<option>德华</option>
<option>华仔</option>
<option>富城</option>
</select>
</body>
</html>

11.7、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 (){
//1.获取标签对象
var formo1Obj= document.getElementById("form01")
//2.标签对象.事件名 = function(){}
formo1Obj.onsubmit= function (){
alert("静态注册表单提交---发现不合法")
return false;
}
}

</script>
</head>
<body>
<!--return false 可以组织表单提交-->
<!--静态注册时 return不能少-->
<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>

12、正则表达式

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//表示要求字符串中,是否包含字母
// var patt = new RegExp("e");
// var patt = /e/; //也是正则表达式
//表示要求字符串中,是否包含字母a或b或c
// var patt = /[abc]/;
//表示要求字符串中,是否包含小写字母
// var patt = /[a-z]/;
//表示要求字符串中,是否包含大写写字母
// var patt = /[A-Z]/;
//表示要求字符串中,是否包含任意数字
// var patt = /[0-9]/;
//表示要求字符串中,是否包含数字、字母、下划线
// var patt = /\w/;
//表示要求字符串中,是否包含至少一个a
// var patt = /a+/;
//表示要求 字符串中是否 包含 零个 或 多个a
// var patt = /a*/;
//表示要求 字符串中是否包含一个或零个a
// var patt = /a?/;
//表示要求 字符串是否包含连续三个a
// var patt = /a{3}/
//表示要求 字符串是否包含 至少3个连续的a,最多5个连续的a
// var patt = /a{3,5}/
//表示要求 字符串是否包含 至少3个连续的a
// var patt = /a{3,}/
//表示要求 字符串必须以a结尾
// var patt = /a$/;
//表示要求 字符串必须以a开头
// var patt = /^a/;

//表示要求字符串,从头到尾都必须完全匹配
// var patt = /^a{3,5}$/;

var patt = /^\w{5,12}$/ ;

var str = "xhg168";
alert(patt.test(str))

// 问题:var patt = /a{3,5}/; 最大值什么时候有用?
// 表示要求字符串,从头到尾都必须完全匹配
// var patt = /^a{3,5}$/;

</script>
</head>
<body>
</body>
</html>

13、DOM 模型

DOM 全称是Document Object Model 文档对象模型
大白话,就是把文档中的标签,属性,文本,转换成为对象来管理。

13.1、Document 对象(重点)

13.2、Document 对象的理解:

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

什么是对象化??

举例:
有一个人有年龄:18 岁,性别:女,名字:张某某
我们要把这个人的信息对象化怎么办!

Class Person {  
private int age;
private String sex;
private String name;
}

那么html 标签要对象化怎么办?

<body>  
<div id="div01">div01</div>
</body>

模拟对象化,相当于:

class Dom{  
private String id; // id 属性
private String tagName; //表示标签名
private Dom parentNode; //父亲
private List<Dom> children; // 孩子结点
private String innerHTML; // 起始标签和结束标签中间的内容
}

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

1. document.getElementById 方法代码

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
/*
* 需求:当用户点击了较验按钮,要获取输出框中的内容。然后验证其是否合法。
* 验证的规则是:必须由字母,数字。下划线组成。并且长度是5 到12 位。
* */
function onclickFun() {
//1.当我们要操作一个标签的时候,一定要先获取这个标签对象。
var usernameObj = document.getElementById("username");
// [object HTMLInputElement] 它就是Dom对象
var userText = usernameObj.value;
// 如何验证字符串,符合某个规则,需要使用正则表达式技术
var patt = /^\w{5,12}$/;

var usernameSpanObj = document.getElementById("usernameSpan");

// innerHTML 表示起始标签和结束标签中的内容
// innerHTML 这个属性可读,可写
// usernameSpanObj.innerText = "hello";

/*
* test()方法用于测试某个字符串,是不是匹配我的规则,
* 匹配就返回true。不匹配就返回false.
* */
if (patt.test(userText)) {
// alert("用户名合法!")
// usernameSpanObj.innerHtml = "用户名合法!";
usernameSpanObj.innerHTML = "<img src=\"right.png\" width=\"18\" height=\"18\">";
} else {
// alert("用户名不合法!")
// usernameSpanObj.innerHtml = "用户名不合法!";
usernameSpanObj.innerHTML = "<img src=\"wrong.png\" width=\"18\" height=\"18\">";
}
}
</script>
</head>

<body>
用户名:<input type="text" id="username" value="xhg">
<span style="color: red" id="usernameSpan">用户名不合法</span>

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

2. document.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");
// checked 表示复选框的选中状态。如果选中是true,不选中是false
// checked 这个属性可读,可写
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].checked = true;
}
}

//全不选
function checkNo() {
var hobbies = document.getElementsByName("hobby");
// checked 表示复选框的选中状态。如果选中是true,不选中是false
// checked 这个属性可读,可写
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].length) {
// 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>

3. document.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>

4. document.createElement 方法代码

<!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
window.onload = function (){
//使用js代码来创建html标签,并显示在页面上
//标签的内容是:<div>哈哈😊<div>

var divObj = document.createElement("div"); // 在内存中 <div></div>
var textNodeObj = document.createTextNode("哈哈😊"); // 有一个文本节点 #哈哈😊
divObj.appendChild(textNodeObj); // <div>哈哈😊<div>
//下面一行和以上两行效果一样
// divObj.innerHTML="哈哈😊"; // <div>哈哈😊<div>,但还只是在内存中
// 添加子元素
document.body.appendChild(divObj)
}
</script>
</head>
<body>

</body>
</html>

13.4、节点的常用属性和方法

节点就是标签对象

方法:
通过具体的元素节点调用

getElementsByTagName()
方法,获取当前节点的指定标签名孩子节点

appendChild( oChildNode )
方法,可以添加一个子节点,oChildNode 是要添加的孩子节点

属性:
childNodes
属性,获取当前节点的所有子节点

firstChild
属性,获取当前节点的第一个子节点

lastChild
属性,获取当前节点的最后一个子节点

parentNode
属性,获取当前节点的父节点

nextSibling
属性,获取当前节点的下一个节点

previousSibling
属性,获取当前节点的上一个节点

className
用于获取或设置标签的class 属性值

innerHTML
属性,表示获取/设置起始标签和结束标签中的内容

innerText
属性,表示获取/设置起始标签和结束标签中的文本

13.5、DOM 查询练习

<!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 lis = document.getElementsByTagName("li");
alert(lis.length)
};
//3.查找name=gender的所有节点
var btn03Ele = document.getElementById("btn03");
btn03Ele.onclick = function () {
var gender = document.getElementsByName("gender");
alert(gender.length)
};
//4.查找#city下所有li节点
var btn04Ele = document.getElementById("btn04");
btn04Ele.onclick = function () {
var lis = document.getElementById("city").getElementsByTagName("li")
alert(lis.length)
};
//5.返回#city的所有子节点
var btn05Ele = document.getElementById("btn05");
btn05Ele.onclick = function () {
// 获取id为city的节点
// 通过city获取所有子节点
alert(document.getElementById("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的节点
var bjObj = document.getElementById("bj");
//2.bj获取父节点
alert(bjObj.parentNode.innerHTML)

};
//8.返回#android的前一个兄弟节点
var btn08Ele = document.getElementById("btn08");
btn08Ele.onclick = function () {
// 获取id为android的节点
// 通过android获取前一个节点
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.返回#bj的文本值
var btn11Ele = document.getElementById("btn11");
btn11Ele.onclick = function () {
// alert(document.getElementById("city").innerText)
// alert(document.getElementById("bj").innerText)
alert(document.getElementById("city").innerHTML)
};
};
</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">返回#bj的文本值</button>
</div>
</div>
</body>
</html>