JavaScript学习笔记

1.什么是JavaScript,有什么用?

  • JavaScript是运行在浏览器上的脚本语言。简称JS。
  • JavaScript这个名字带有"Java"但是和Java没有关系,只是语法上有点类似。他们运行的位置不同。Java运行在JVM中,JavaScript运行在浏览器的内存当中。
  • JavaScript程序不需要手动编译,编写完源码之后,浏览器直接打开解释执行。
  • JavaScript的"目标程序"以普通文本形式保存,这种语言都叫做"脚本语言"。
  • Java的"目标程序"已.class形式存在,不能使用文本编译器打开,不是脚本语言。
    JavaScript包括三大块:
    ECMAScript:JS的核心语法(ES规范/ECMA-262标准)
    DOM:Document Object Model(文档对象模型:对网页当中的节点进行增删改的过程。)HTML文档被当作一棵DOM树看待。
var domObje=document.getElementById("id"); 

BOM:Browser Object Model(浏览器对象模型)
关闭浏览器窗口、打开浏览器窗口、后退、前进、浏览器地址栏上的地址等,都是BOM编程。

2.HTML嵌入JavaScript的三种方式

2.1、第一种方式:事件句柄
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML嵌入JavaScript的第一种方式</title>
</head>
    <!--
        1.要实现的功能,弹出消息框。

        2.JS是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序。
        在JS中有很多事件,其中有一个事件叫做:鼠标单击,单词:click。并且任何
        时间都会对应一个事件句柄叫做:onclick。【注意:事件和事件句柄的区别是:
        事件句柄是在事件单词前添加一个on。】,而事件句柄是以HTML标签的属性存在的。

        3.οnclick="js代码",执行原理是什么?
            页面打开的时候,js代码并不会执行,只是把这段JS代码注册到按钮的click事件上了。
            等这个按钮发生click事件之后,注册在onclick后面的js代码会被浏览器自动调用。

        4.怎么使用JS代码弹出消息框?
            在JS中有一个内置的对象叫做sindow,全部小写,可以直接拿来使用,window代表的是浏览器对象。
            window对象有一个函数叫做:alert,用法是:window.alert("消息");这样就可以弹窗了。

        5.JS中的字符串可以使用双引号,也可以使用单引号。

        6.JS中的一条语句结束之后可以使用分号";",也可以不用。
    -->
<body>
    <input type="button" value="hello" onclick="window.alert('hello js')">

    <input type="button" value="hello" onclick='window.alert("hello js")'>

    <!--window,可以省略-->
    <input type="button" value="hello" onclick="alert('hello zhangsan')
                                            alert('hello lisi')
                                            alert('hello wangwu')">

    <input type="button" value="hello" onclick="alert('hello zhangsan');
                                            alert('hello lisi');
                                            alert('hello wangwu');">


</body>
</html>
2.2、第二种方式:脚本块
<script type="text/javascript">
    window.alert("first........");
</script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML嵌入JavaScript的第二种方式</title>
    <script type="text/javascript">
        /*
            暴露在脚本快当中的程序,在页面打开的时候执行,
            并且遵循自上而下的顺序依次逐行执行。(这个代码的执行不需要事件)
        */
        window.alert("head...........");
        
        //JS代码的注释,这是单行注释。
        /*
            JS代码的多行注释,和java一样。
        */
    </script>
</head>
<body>
    <input type="button" value="我是按钮对象1"/>
    
    <!--
        JavaScript的脚本块在一个页面当中可以出现多次。没有限制。
        JavaScript的脚本块出现位置也没有要求,随意。
    -->
    <script type="text/javascript">
        window.alert("body..............");//alert函数会阻塞整个HTML页面的加载
    </script>
    
    <input type="button" value="我是按钮对象2"/>
</body>
</html>
2.3、第三种方式:引入外部独立的js文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML嵌入JavaScript的第三种方式</title>
</head>
<body>
    <script type="text/javascript" src="js/1.js">
        //这里写的代码不会执行。
        //window.alert("hello world!");
    </script>

    <script type="text/javascript">
        alert("kiss kiss");
    </script>
</body>
</html>

js文件

window.alert("first");
window.alert("second");
window.alert("third");

3.JS的变量

  • Java中要求变量声明的时候是什么类型,不可变。编译器强行固定变量的数据类型称为强类型语言。(数据类型 变量名;)
  • 对比Java,JavaScript是一种弱类型语言,没有编译阶段,一个变量可以随意赋值,赋什么类型的值都行。(var 变量名;)

在js中可以执行,但在java中不能执行

var i=100;
i="abc";
i=false;
  • 当系统没有赋值的时候,会默认赋undefined,undefined是系统的一个存在值。
  • 当系统直接没声明直接调用一个值,会报错。

(图片3)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>变量</title>
</head>
<body>
	<script type="text/javascript">
		var a,b,c=200;
		alert("a="+a);
		alert("b="+b);
		alert("c="+c);
		
		a=false;
		alert(a);
		
		a="abc";
		alert(a);
		
		a=1.5;
		alert(a);
	</script>
</body>
</html>

4.JS的函数

4.1、JS函数的定义和使用

函数类似java中的方法
java中定义方法的格式是

[修饰符列表] 返回值类型 方法名(形式参数列表){
	方法体;
}

public static int sum(int a ,int b){
	return a+b;
}

int sum=sum(1,2);

而js是一种弱类型,js中的函数不需要指定返回值类型,返回什么类型都行
函数的定义格式是

//第一种方式:
function 函数名(形式参数列表){
	函数体;
}
//第二种方式:
函数名=function(形式参数列表){
	函数体;
}

例如函数

//第一种函数定义格式
function sum(a,b){
	//a和b都是局部变量,他们都是形参(a和b都是变量名,变量名随意。)
	alert(a+b);
}

sum(a,b);//函数必须调用才能执行

//第二种函数定义格式
sayhello=function(username){
	alert("hello "+username);
}

sayhello("zhangsan");//调用函数

配合单击按钮框的完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数</title>
</head>
<body>
  <script type="text/javascript">
    //第一种函数定义格式
    function sum(a,b){
      //a和b都是局部变量,他们都是形参(a和b都是变量名,变量名随意。)
      alert(a+b);
    }
    
    //第二种函数定义格式
    sayhello=function(username){
      alert("hello "+username);
    }
    
    //调用函数(打开页面先执行)
    sayhello("lisi");
  </script>

  <input type="button" value="计算10和20的和" onclick="sum(10,20)">
  <input type="button" value="sayhello" onclick="sayhello('zhansgan')">
</body>
</html>
4.2、JS函数的重载机制

重载的定义:方法名或者函数名一样,形参不同(个数,顺序,类型)

  • JS当中的函数在调用的时候,参数的类型没有限制,并且参数的个数也没有限制,js本身自带重载。(弱类型)
  • 在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声名的同名函数覆盖。

样例演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>重载机制</title>
</head>
<body>
  <script type="text/javascript">
    function sum(a,b){
      return a+b;
    }
    
    //调用函数sum
    var retValue=sum(1,2);
    alert(retValue); // 3
    
    var retValue2=sum("jack");//jack赋值给a变量,b变量没有赋值系统默认undefined
    alert(retValue2); // jackundefined
    
    var retValue3=sum();
    alert(retValue3); // NaN
    
    var retValue4=sum(1,2,3);
    alert(retValue4); // 3
    
    /*
      在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声明的函数覆盖。
    */
    function test(username){
      alert("test");
    }
    
    function test(){
      alert("test test");
    }
    test("zhangsan"); // 这个调用的是第二个test()函数
  </script>
</body>
</html>

5.JS的全局变量和局部变量

  • 在函数体之外声明的变量属于全局变量;在函数体当中声明的变量,包括一个函数的形参都属于局部变量
  • 全局变量的生命周期是浏览器打开时声明,浏览器关闭时销毁,尽量少用。因为全局变量会一直在浏览器的内存当中,耗费内存空间
  • 局部变量的生命周期是:函数开始执行时局部变量的内存空间开辟,函数执行结束之后,局部变量的内存空间释放,局部变量生命周期较短。

演示样例

//全局变量
var username="jack";

function hitUsername(){
	//局部变量
	var username="zhangsan";
	//就近原则:访问局部变量
	alert("username="+username);
}

//调用函数
hitUsername();

alert("username="+username);

先输出zhangsan,后输出jack
因为局部变量结束后便释放了,所以局部变量没有值
而如果单纯没有定义全局变量,在全局中输出局部变量那就会报错。

function accessAge(){
	var age=20;
	alert("age="+age);
}

accessAge();

//报错:Uncaught ReferenceError: age is not defined
alert("age="+age);

如果一个变量在声明的时候没有定义var,默认是全局变量(即使在局部变量中声明)

function myfun(){
	//当一个变量声明的时候没有使用var关键字,那么不管这个变量是在哪里声明的,都是全局变量。
	myname="jm";
}

//调用函数
myfun();

alert("myname="+myname); // myname=jm

6.JS中的数据类型

JS中的数据类型有:原始类型、引用类型

  • 原始类型:Undefined、Number、String、Boolean、Null
  • 引用类型:Object以及Object的子类
var i;
alert(typeof i);//"undefined"

var k=10;
alert(typeof k);//"number"

var f="abc";
alert(typeof f);//"string"

var d=null;
alert(typeof d);//"object" null属于Null类型,但是typeof运算符的结果是"Object"

var flag=false;
alert(typeof flag);//"boolean"

var obj=new Object();
alert(typeof obj);//"object"

//sayhello是一个函数
function sayhello(){
}
alert(typeof sayhello);//"function"
  • typeof:这个运算符可以在程序的运行阶段动态的获取变量的数据类型(typeof运算符的运算结果是以下6个字符串之一:注意字符串都是全部小写。“undefined”、“number”、“string”、“boolean”、“object”、“function”
  • 在JS当中比较字符串是否相等使用"=="完成。没有equals
/*
typeof运算符的语法格式:
	typeof 变量名
*/
function sum(a,b){
	if(typeof a=="number"&&typeof b=="number"){
		return a+b;
	}
	alert(a+","+b+"必须都为数字!");
}
6.1、Undefined类型

当一个变量没有手动赋值,系统默认赋值undefined
或者也可以给一个变量手动赋值undefined

var i;//undefined
var j=undefined;//undefined

alert(i==j);//true

var k="undefined";//"undefined"是一个字符串类型
alert(j==k);// false
6.2、Number类型

Number类型包括整数、小数、正数、负数、不是数字、无穷大等
-1 0 1 2 2 3.14 100 … NaN Infinity等都属于Number类型

解释Infinity

//Infinity(当除数为0的时候,结果为无穷大)
alert(10/0);

解释NaN

var a=100;
var b="中国";
alert(a/b);//除号显然最后结果应该是一个数字,但是运算的过程中导致最后不是一个数字,那么最后的结果是NaN

var i="abc";
var j="10";
alert(i+j);//"abc10",但此处的加号不是数学相加,而是字符串拼接

isNaN函数
is Not a Number
isNaN(数据),结果是true表示不是一个数字,结果是false表示是一个数字

function sum(a,b){
	if(isNaN(a)||isNaN(b)){
		alert("参与运算的必须是数字!");
		return ;
	}
	return a+b;
}
sum(100,"abc");
alert(sum(100,200));

parseInt()或者parseFloat()
可以将字符串自动转换成数字

alert(parseInt(3.999));// 3
alert(parseInt("3.999"));// 3


alert(parseFloat("3.14")+1);// 4.140000000000001
alert(parseFloat("3.2")+1);// 4.2

Math.ceil()
向上取整

//Math.ceil()
alert(Math.ceil(-1.5));// -1
alert(Math.ceil(3.54));//4
6.3、Boolean类型

只有两个值:true和false

alert(Boolean(1));// true
alert(Boolean(0));// false
alert(Boolean(""));// false
alert(Boolean("abc"));// true
alert(Boolean(null));// false
alert(Boolean(NaN));// false
alert(Boolean(undefined));// false
alert(Boolean(Infinity));// true

Boolean(),Boolean()函数的作用是将非布尔类型转换成布尔类型

语法格式:
	Boolean(数据)
6.4、NULL类型

只有一个值:null

alert(typeof null);//"object"
6.5、String类型
  • 在JS当中字符串可以使用单引号,也可以使用双引号
var s1='abc';
var s2="efg";

两种创建对象的方式,但创建的对象的类型有所不同
String是一个内置的类,可以直接用,String的父类是Object

//第一种
var s="abc";
//第二种(使用JS内置的支持类String)
var s2=new String("abc");

//小String(属于原始类型String)
var x="king";
alert(typeof x);// "string"

//大String(属于Object类型)
var y=new Object("dog");
alert(typeof y);// "object"

常用函数

函数名功能
indexOf获取指定字符串在当前字符串中第一次出现处的索引
lastIndexOf获取指定字符串在当前字符串中最后一次出现处的索引
replace替换
substr截取子字符串
substring截取子字符串
toLowerCase转换小写
toUpperCase转换大写
spit拆分字符串
alert("http://www.baidu.com".indexOf("http"));// 0
alert("http://www.baidu.com".indexOf("https"));// -1

//判断一个字符串中是否包含某个字符串?
alert("http://www.baidu.com".indexOf("https")>=0 ?"包含" :"不包含");// 不包含

//replace(注意:只替换了第一个)
alert("name=value%name=value%name=value%name=value".replace("%","&"));// name=value&name=value%name=value%name=value

//继续调用replace方法,就会替换第"二"个
//想全部替换需要使用正则表达式
alert("name=value%name=value%name=value%name=value".replace("%","&").replace("%","&"));// name=value&name=value&name=value%name=value

substr和substring的区别?

//substr(startIndex,length);
alert("123456789".substr(2,4));// 3456

//substring(startIndex,endIndex) 注意:不包含endIndex
alert("123456789".substring(2,4));// 34
6.6、Object类型
  • Object类型是所有类型的超类,自定义的任何类型,默认继承Object

js定义类的方式

定义类的语法:
	第一种方式:
		function 类名(){
			
		}
	第二种方式:
		类名=function(){
		
		}
创建对象的语法:
	new 构造方法名(实参);//构造方法和类名一致

js的类定义以及讨论

//定义一个学生类
function Student(){
	alter("student.........");
}

//当做普通函数调用
Student();

//当做类来创建对象
var stu=new Student();
alter(stu);//[object Object]

JS中的类的定义,同时又是一个构造函数的定义
在JS中类的定义和构造函数的定义是放在一起完成的
js的函数形参调用可以有一个或者多个都可以执行,因为是弱类型。

function User(a,b,c){//a b c是形参,属于局部变量
	//生命属性(this表示当前对象)
	//User类中有三个属性:sno/sname/sage
	this.sno=a;
	this.sname=b;
	this.sage=c;
}

//创建对象
var u1=new User(111,"zhangsan",30);
//访问对象的属性
alert(u1.sno);
alert(u1.sname);
alert(u1.sage);

var u2=new User(222,"jack",55);
alert(u2.sno);
alert(u2.sname);
alert(u2.sage);

//访问一个对象的属性,还可以使用这种方法
alert(u2["sno"]);
alert(u2["sname"]);
alert(u2["sage"]);

也可以换种方式定义类

Product=function(a,b,c){
	//属性
	this.pno=a;
	this.pname=b;
	this.price=c;
	//函数
	this.getPrice=function(){
		return this.price;
	}
}

var xigua=new Product(111,"西瓜",5.0);
var price=xigua.getPrice();
alert(price);
  • 属性有:prototype属性(常用的,主要是这个):作用是给类动态的扩展属性和函数。除此之外,还有constructor属性。
// 可以通过prototype这个属性来给类动态扩展属性以及函数
Product.prototype.getPname=function(){
	return this.pname;
}

// 调用后期扩展的getPname()函数
var pname=xigua.getPname();
alert(pname);

// 给String扩展一个函数
String.prototype.suiyi=function(){
	alert("这是给Stirng类型扩展的一个函数,叫做suiyi")
}

// 调用后期扩展的suiyi()函数
"abc".suiyi();

// 调用后期扩展的shuxing属性
String.prototype.shuxing="属性";

对比一下java类型定义与js类型定义
java语言怎么定义类,怎么创建对象?(强类型)

public class User(){
	Private String username;
	Private String password;
	Public User(){
	}
	Public User(String username,String password){
		this.username=username;
		this.password=password;
	}
}
User user = new User();
User user2=new User("lisi","123");

JS语言怎么定义类,怎么创建对象?(弱类型)

User = function(username,password){
	this.username=username;
	this.password=password;
}
var u=new User();
var u=new User("zhangsan");
var u=new User("zhangsan","123");
6.7、null、NaN、undefined类型
  • 数据类型不一致
  • ==(等同运算符:只判断值是否相等)
  • ===(全等运算符:既判断值是否相等,又判断数据类型是否相等)
//null NaN undefined 数据类型不一样
alert(typeof null);// "object"
alert(typeof NaN);// "number"
alert(typeof undefined);// "undefined"

//null和undefined可以等同。
alert(null == NaN); // false
alert(null == undefined);// true
alert(NaN == undefined);// false

//在JS当中有两个比较特殊的运算符
alert(null === NaN); // false
alert(null === undefined);// false
alert(NaN === undefined);// false

7.JS事件

  • 任何一个事件都会对应一个事件句柄,事件句柄是在事件前添加on
  • onXXX这个事件句柄出现在一个标签的属性位置上。(事件句柄以属性的形式存在。)
7.1、常用事件

blur失去焦点、foucs获得焦点
(所谓焦点是光标的获得与失去)

click鼠标单击、dblclick鼠标双击

keydown键盘按下、keyup键盘弹起

mousedown鼠标按下、mouseover鼠标经过
mousemove鼠标移动、mouseout鼠标离开
mouseup鼠标弹起

reset表单重置、submit表单提交

change下拉列表选中项改变,或文本框内容改变
select文本被选定
load页面加载完成(整个HTML页面中所有的元素全部加载完毕之后发生。)

7.2、注册事件方式

回调函数的特点:A程序写回调函数但是不自己调用,由B程序负责调用该函数。

注册事件的第一种方式,直接在标签中使用事件句柄

	<script type="text/javascript">
		function sayhello(){
			alert("hello js");
		}
	</script>
	
	<!--以下代码的含义是:将sayhello函数注册到按钮上,等待click事件发生之后,该函数被浏览器调用。我们称这个函数为回调函数-->
	<input type="button" value="hello" onclick="sayhello()"/>

注册事件的第二种方式,使用js代码完成事件注册

	<input type="button" value="hello" id="mybtn"/>
	<script type="text/javascript">
		function doSome(){
			alert("doSome....");
		}
		//第一步:先获取这个按钮对象(document是全部小写,内置对象,可以直接用,document就代表整个HTML页面)
		var btnObj=document.getElementById("mybtn");
		//第二步:给按钮对象的onclick属性赋值
		btnObj.onclick=doSome;//注意:别加小括号,btnObj.οnclick=doSome();这种错误的写法
		//这行代码的含义是,将回调函数doSome注册到click时间上。
	</script>

注册事件的第三种方式,使用匿名函数

	<input type="button" value="hello" id="mybtn"/>
	<script type="text/javascript">
		var mybtn=document.getElementById("mybtn");
		mybtn.onclick=function(){//匿名函数,这个匿名函数也是一个回调函数
			alert("test.........")//这个函数在页面打开的时候只是注册上,不会被调用,在click事件发生之后才会调用			
		}
	</script>

合并注册事件的写法

	<input type="button" value="hello" id="mybtn"/>
	<script type="text/javascript">
		document.getElementById("mybtn").onclick=function(){
			alert("6666666666");
		}
	</script>
7.3、代码执行顺序

先看一段与上文中不同顺序的程序

	<script type="text/javascript">
		// 第一步:根据id获取节点对象
		var btn=document.getElementById("btn"); // 返回null(因为代码执行到此处的时候id="btn"的元素还没有加载到内存)
		
		// 第二步:给节点对象绑定事件
		btn.onclick=function(){
			alert("hello js");
		}
	</script>
	<input type="button" value="hello" id="btn"/>

执行错误,返回了null,因为还未获取到id元素。

所以我们添加上面的一个函数load()
页面加载完的时候才会发生
不常用:

	<!--load事件发什么时候发生?页面全部元素加载完成之后才会发生。-->
	<body onload="ready()">
	<script type="text/javascript">
		function ready(){
			var btn=document.getElementById("btn");
			btn.onclick=function(){
				alert("hello js");
			}
		}
	</script>
	<input type="button" value="hello" id="btn"/>
	</body>
	<body onload="ready()">
	//等同于
	//需要写在script内
	window.onload=ready;

常用:

	<script type="text/javascript">
		//页面加载的过程中,将a函数注册给了load事件
		//页面加载完成之后,load事件发生了,此时执行回调函数a
		//回调函数a执行的过程中,把b函数注册给了id="btn"的click事件
		//当id="btn"的节点发生click事件之后,b函数被调用并执行
		window.onload=function(){//这个回调函数叫做a
			document.getElementById("btn").onclick=function(){//这个回调函数叫做b
				alert("hello js");
			}
		}
	</script>
	<input type="button" value="hello" id="btn"/>
7.4、设置节点的属性

通过点击一个按钮框,将其改变为复选框

	<script type="text/javascript">
		window.onload=function(){
			document.getElementById("btn").onclick=function(){
				document.getElementById("mytext").type="checkbox";
			}
		}
	</script>
	
	<input type="text" id="mytext">
	<input type="button" value="将文本框修改为复选框" id="btn"/>
7.5、捕捉回车键

回车键的键值是13,ESC键的键值是27
按钮键是onclick,而回车键是onkeydown
回调函数的参数可以有,也可以没有,都会调用回调函数

	<script type="text/javascript">
		window.onload=function(){
			document.getElementById("username").onkeydown=function(a,b,c){
				//获取键值
				alert(a);//[object KeyboardEvent]
				//alert(b);
				//alert(c);
			}
		}
	</script>
	<input type="text" id="username">

回车键摁下,浏览器会new一个对象,用函数接受当前的事件,用当前事件调用属性获取值。

	<script type="text/javascript">
		window.onload=function(){
			document.getElementById("username").onkeydown=function(event){
				//获取键值
				//对于"键盘事件对象"来说,都有keyCode属性用来获取键值
				alert(event.keyCode);
			}
		}
	</script>
	<input type="text" id="username">

如果捕获回车键,需要在事件函数中判断是否为键值

	<script type="text/javascript">
		window.onload=function(){
			document.getElementById("username").onkeydown=function(event){
				if(event.keyCode === 13){
						alert("正在验证......");
				}
			}
		}
	</script>
	<input type="text" id="username">
7.6、JS运算符

此处只讲void运算符void(表达式)

  • 执行表达式,但不返回任何结果
  • javascript:void(0)其中javascript:作用是告诉浏览器后面是一段JS代码。以下程序的javascript是不能省略的。
		<a href="javascript:void(0)" onclick="window.alert('test code')">
			既保留住超链接的样式,同时用户点击该超链接的时候执行一段JS代码,但页面还不能跳转。
		</a>
  • void()这个小括号当中必须有值,不然会有语法错误
  • href=""默认空字符串或者是null或者false都是会跳转的,必须要是以上格式才行
7.7、JS的控制语句

for循环和for in使用

  <script type="text/javascript">
    //创建
    var arr=[false,"abc",123,3.14];
    //遍历数组
    for(var i=0;i<arr.length;i++){
      alert(arr[i]);
    }
    
    //for...in
    for(var i in arr){
      //alert(i);
      alert(arr[i]);
    }
    
    User=function(username,password){
      this.username=username;
      this.password=password;
    }
    
    //for..in语句可以遍历对象的属性
    var u=new User("zhangsan","123");
    alert(u.username+","+u.password);
    alert(u["username"]+","+u["password"]);
    
    for(var shuXingMing in u){
      //alert(shuXingMing); 输出的是username和password
      //alert(typeof shuXingMing); //shuXingMing是一个字符串
      alert(u[shuXingMing]);
    }
    
  </script>

with结构
with语句的调用先放在()内,在里面调用属性即可

    with(u){
      alert(username+","+password);
    }

8.DOM

DOM:Document Object Model(文档对象模型:对网页当中的节点进行增删改的过程。)HTML文档被当作一颗DOM树来看待。

var domObj=document.getElementById("id");

DOM和BOM的区别

  • BOM的顶级对象是:window
  • DOM的顶级对象是:document
  • 实际上BOM是包括DOM的!

(图片5!!!!!!!!!!!!!!!!!!!!!!!)

8.1、设置和获取文本框的value

1.通过单击按钮框获取或修改value值

  <script type="text/javascript">
    window.onload=function(){
      document.getElementById("btn").onclick=function(){
        //获取文本框的value
        //alert(document.getElementById("username").value);
        //修改文本框的value为"张三"
        document.getElementById("username").value="张三";
      }
    }
  </script>
  <input type="text" id="username"/>
  <input type="button" value="单击获取文本框的value" id="btn"/>

2.将第一个文本框中的value赋值到第二个文本框上

  <script type="text/javascript">
    window.onload=function(){
      document.getElementById("btn").onclick=function(){
        document.getElementById("username2").value=
        document.getElementById("username").value;
      }
    }
  </script>
  <input type="text" id="username"/>
  <input type="text" id="username2"/>
  <input type="button" value="单击此处将第一个文本框中的文本赋值到第二个文本框中" id="btn">

3.失去焦点对象获取value值,通过this指针

  <!--blur事件,失去焦点事件-->
  <!--以下代码中的this代表的是当前input节点对象,this.value就是这个节点对象的value属性。-->
  <input type="text" onblur="alert(this.value)">
8.2、innerHTML和innerText属性

相同点:都是设置元素内部的内容。
不同点
innerHTML会把后面的"字符串"当做一段HTML代码解释并执行
innerText只是把后面的"字符串"当作普通的字符串来看待。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>innerHTML和innerText</title>
    <style type="text/css">
        #div1{
            background-color:yellow;
            width:300px;
            height:300px;
            border:2px solid black;
            position:absolute;
            top:100px;
            left:100px;
        }
    </style>
</head>
<body>
    <script type="text/javascript">
        window.onload=function(){
            var btn=document.getElementById("btn");
            btn.onclick=function(){
                var divElt=document.getElementById("div1");
                divElt.innerHTML="<font color='red'>用户名不能为空!!</font>";
            }
        }
    </script>
    <input type="button" value="设置div中的内容" id="btn">
    <div id="div1"></div>
</body>
</html>
8.3、正则表达式

正则表达式(Regular Expression):主要用在字符串格式匹配方面
常用正则表达式符号

符号功能
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

常用限定符符号

符号功能
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

常用的反义代码

符号功能
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
  • 正则表达式当中的小括号()优先级最高
    [1-9] 表示1到9的任意1个数字(次数是1次。)
    [A-Za-z0-9] 表示A-Za-z0-9中的任意1个字符
    [A-Za-z0-9-] 表示A-Z、a-z、0-9、- ,以上所有字符中的任意1个字符
  • 简单的正则表达式要会写
    QQ号的正则表达式:1[0-9]{4,}$
    email正则:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$

创建表达式对象以及调用方式
第一种创建方式:var regExp = /正则表达式/flags;
第二种创建方式:使用内置支持类RegExp,var regExp = new RegExp(“正则表达式”,“flags”);

flags参数:

  • g:全局匹配
  • i:忽略大小写
  • m:多行搜索(ES规范制定之后才支持)
    当前面试正则表达式的时候,m不能用
    当前面是普通字符串的时候,m才可以使用

使用方式:
正则表达式对象具有test()方法

true/false=正则表达式对象.test(用户填写的字符串);
  • true:字符串匹配成功
  • false:字符串匹配失败
8.3.1、验证邮箱格式

代码示例验证邮箱是否正确

<body>
  <script style="text/javascript">
    window.onload=function(){
      //给按钮绑定click
      document.getElementById("btn").onclick=function(){
        var email=document.getElementById("email").value;
        var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
        var ok=emailRegExp.test(email);
        if(ok){
          //合法
          document.getElementById("emailError").innerText="邮箱地址合法";
        } else {
          //不合法
          document.getElementById("emailError").innerText="邮箱地址不合法";
        }
      }
      //给文本框绑定focus,当邮箱格式不对光标回到文本框时,文本清空
      document.getElementById("email").onfocus=function(){
        if(document.getElementById("emailError").innerText=="邮箱地址不合法"){
          document.getElementById("email").value="";
        }
        document.getElementById("emailError").innerText="";
      }
    }
  </script>
  
  <input type="text" id="email">
  <span id="emailError" style="color:red;font-size:15px"></span><br>
  <input type="button" value="验证邮箱" id="btn">
</body>
8.3.2、扩展字符串trim()函数

trim():去除字符串前后空白字符

<body>
  <script type="text/javascript">
    window.onload=function(){
      document.getElementById("btn").onclick=function(){
        //获取用户名
        var username=document.getElementById("username").value;
        //去除前后空白
        username=username.trim();
        //测试
        alert("--->"+username+"<--");
      }
      
    }
  </script>
    <input type="text" id="username"/>
    <input type="button" value="获取用户名" id="btn"/>
</body>

低版本的IE浏览器不支持trim()函数,可以自己对String类扩展一个全新的trim()函数,重写覆盖trim()函数,在trim()函数中写正则表达式

<body>
  <script type="text/javascript">
    //扩展trim函数,因为旧版本IE浏览器不支持trim函数
    String.prototype.trim = function(){
        return this.replace(/^\s+|\s+$/g,"");
    }
    window.onload=function(){
      document.getElementById("btn").onclick=function(){
        //获取用户名
        var username=document.getElementById("username").value;
        //去除前后空白
        username=username.trim();
        //测试
        alert("--->"+username+"<--");
      }
      
    }
  </script>
    <input type="text" id="username"/>
    <input type="button" value="获取用户名" id="btn"/>
</body>
8.4、表单验证

需求:
(1)用户名不能为空
(2)用户名必须在6-14位之间
(3)用户名只能有数字和字母组成,不能含有其它符号(正则表达式)
(4)密码和确认密码一致,邮箱地址合法。
(5)统一失去焦点验证
(6)错误提示信息统一在span标签中提示(不能用div,div会换行)并且要求字体12号,红色。
(7)文本框再次获得焦点后,清空错误提示信息,如果文本框中数据不合法要求清空文本框的value
(8)最终表单中所有项均合法方可提交

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单验证</title>
    <style type="text/css">
      span{
        color:red;
        font-size:12px;
      }
    </style>
</head>
<body>
  <script type="text/javascript">
    window.onload=function(){
      //获取username的文本框
      var usernameElt=document.getElementById("username");
      //获取username的span标签
      var usernameErrorSpan=document.getElementById("usernameError");
      
      //给username的文本框绑定blur事件
      document.getElementById("username").onblur=function(){
        var username=usernameElt.value;
        //去除前后空字符
        username=username.trim();
        //以下对名字进行判断是否合法!!
        if(username==""){
          //用户名为空,不合法
          //alert("名字不能为空");
          usernameErrorSpan.innerText="名字不能为空";
        } else {
          //用户名不为空
          //继续判断名字长度是否在[6,14]
          if(username.length<6||username.length>14){
            //名字长度不合法
            //alert("名字的长度必须在6-14位之间");
            usernameErrorSpan.innerText="名字的长度必须在6-14位之间";
          } else {
            //名字长度合法
            //继续判断是否有特殊符号
            var nameRegExp=/^[0-9A-Za-z]+$/;//名字的正则表达式
            var ok=nameRegExp.test(username);
            if(ok){
              //用户名合法
            } else {
              //用户名不合法
              //alert("用户名只能由数字和字母组成");
              usernameErrorSpan.innerText="用户名只能由数字和字母组成";
            }
          }
        }
      }
      
      //给username的文本框绑定focus事件
      usernameElt.onfocus=function(){
        //有提示内容,说明用户名合法
        if(usernameErrorSpan.innerText!=""){
          usernameElt.value="";
        }
        //光标点击文本框之后,清空提示
        usernameErrorSpan.innerText="";
      }
      
      
      //获得userpwd的文本框
      var userpwdElt=document.getElementById("userpwd");
      //获得userpwd2的文本框
      var userpwd2Elt=document.getElementById("userpwd2");
      //获得userpwd2Error的span标签
      var userpwd2ErrorSpan=document.getElementById("userpwd2Error");
      
      //给userpwd2文本框绑定blur事件
      userpwd2Elt.onblur=function(){
        var userpwd=userpwdElt.value;
        var userpwd2=userpwd2Elt.value;
        if(userpwd!=userpwd2){
          //密码不一致
          //alert("密码不一致");
          userpwd2ErrorSpan.innerText="密码不一致";
        } else {
          //密码一致
        }
      }
      
      //给userpwd2文本框绑定focus事件
      userpwd2Elt.onfocus=function(){
        if(userpwd2ErrorSpan.innerText!=""){
          userpwd2.value="";
        }
        userpwd2ErrorSpan.innerText="";
      }
      
      
      //获得email文本框
      var emailElt=document.getElementById("email");
      //获得emailError的span标签
      var emailErrorSpan=document.getElementById("emailError");
      
      //给email文本框绑定blur事件
      emailElt.onblur=function(){
        var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//邮箱正则表达式
        var email=emailElt.value;
        var ok=emailRegExp.test(email);
        if(ok){
          //邮箱格式合法
        } else {
          //alert("邮箱格式不合法");
          emailErrorSpan.innerText="邮箱格式不合法";
        }
      }
      
      //给email文本框绑定focus事件
      emailElt.onfocus=function(){
        if(emailErrorSpan.innerText!=""){
          emailElt.value="";
        }
        emailErrorSpan.innerText="";
      }
      
      
      //最后一步,表单中所有项均合法方可提交
      //获得提交按钮
      var submitBtnElt=document.getElementById("submitBtn");
      //给提交按钮绑定click事件
      submitBtnElt.onclick=function(){
        //触发username的blur userpwd2的blur email的blue
        //不需要人工操作,使用纯JS代码触发事件
        usernameElt.focus();
        usernameElt.blur();
        
        userpwd2Elt.focus();
        userpwd2Elt.blur();
        
        emailElt.focus();
        emailElt.blur();
        
        //当所有表单都是合法的时候,提交表单
        if(usernameErrorSpan.innerText==""&&userpwd2ErrorSpan.innerText==""&&emailErrorSpan.innerText==""){
          //获取表单对象
          var userformElt=document.getElementById("userform");
          //提交表单
          userformElt.submit();
        }
      }
      
    }
  </script>
  <form id="userform" action="http://loaclhost:8080/jd/save" method="get">
    用户名<input type="text" name="username" id="username"/><span id="usernameError"></span><br>
    密码<input type="text" name="userpwd" id="userpwd"/><br>
    确认密码<input type="text" id="userpwd2"/><span id="userpwd2Error"></span><br>
    邮箱<input type="text" name="email" id="email"/><span id="emailError"></span><br>

    <input type="button" value="注册" id="submitBtn">
    <input type="reset" value="重置" id="resetBtn">
  </form>
</body>
</html>
8.5、复选框的全选和取消全选

获取所有name相同的元素:
var aihaos = document.getElementsByName(“aihao”);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复选框的全选和取消全选</title>
</head>
<body>
  <script type="text/javascript">
    window.onload=function(){
		
      //获取headChk元素
      var firstChk=document.getElementById("firstChk");
	  //获取所有的aihao元素
	  var aihaos=document.getElementsByName("aihao");
      //给firstChk绑定click事件
      firstChk.onclick=function(){
        for(var i=0;i<aihaos.length;i++){
          aihaos[i].checked=firstChk.checked;
        }
      }
	  
	  //统计aihaos集合的元素总数量
	  var all=aihaos.length;
	  for(var i=0;i<aihaos.length;i++){
		  aihaos[i].onclick=function(){
			  var checkedCount=0;
			  for(var j=0;j<aihaos.length;j++){
				  if(aihaos[j].checked){
					  checkedCount++;
				  }
			  }
			  //总数量和选中的数量相等时,第一个复选框选中
			  firstChk.checked=(checkedCount==all);
		  }
	  }
    }
  </script>
  <input type="checkbox" id="firstChk"/><br>
  <input type="checkbox" name="aihao" value="smoke"/>抽烟<br>
  <input type="checkbox" name="aihao" value="drink"/>喝酒<br>
  <input type="checkbox" name="aihao" value="code"/>编程<br>
</body>
</html>
8.6、获取下拉列表选项中的value

通过onorange的事件获取当亲下拉列表的值,this代表当前

		<select onchange="alert(this.value)">
			<option value="">--请选择省份--</option>
			<option value="001">山东</option>
			<option value="002">北京</option>
			<option value="003">江苏</option>
			<option value="004">浙江</option>
			<option value="005">上海</option>
		</select>

换一种写法,使用js代码。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>获取下拉列表选项中的value</title>
	</head>
	<body>
		<script text/javascript>
			window.onload=function(){
				//获取省份元素
				var procinceListElt=document.getElementById("provinceList");
				//给省份元素添加change事件
				procinceListElt.onchange=function(){
					//获取选项中的value
					alert(procinceListElt.value);
				}
			}
		</script>
		
		<select id="provinceList">
			<option value="">--请选择省份--</option>
			<option value="001">山东</option>
			<option value="002">北京</option>
			<option value="003">江苏</option>
			<option value="004">浙江</option>
			<option value="005">上海</option>
		</select>
	</body>
</html>
8.7、内置支持类
8.7.1、获取日期(Date)
var nowTime=new Date();
document.write(nowTime);

Tue Aug 09 2022 22:56:34 GMT+0800 (中国标准时间)
日期格式不符合我们的观感!
转换成具有本地语言环境的日期格式:nowTime=nowTime.toLocaleString();
2022/8/9 22:58:15

如果需要自己组建一个日期格式可以这样写:

  • 获取年份信息getFullYear();
  • 获取月份日期getMonth();
  • 获取当日信息getDate();
  • 获取当前系统的毫秒数(从1970年1月1日 00:00:000到当前系统时间的总毫秒数)getTime();
//当以上格式不是自己想要的,可以通过日期获取年月日等信息,自定制日期格式。
var date=new Date();
var year=date.getFullYear();//返回年信息,以全格式返回
var month=date.getMonth();//月份:0-11
var dayOfWeek=date.getDay();//获取一周的第几天(1-7)
var day=date.getDate();//获取日信息
document.write(year+"年"+(month+1)+"月"+day+"日");
document.write("<br>");//换行
document.write("今天是这个周的第"+dayOfWeek+"天");

通过结合按钮框,一点击就显示有系统时间
系统开始时间setInterval(“函数名”,间隔毫秒时间数)
终止系统时间,通过传输开始执行的数据clearInterval(传输开始执行的数据)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>获取日期</title>
	</head>
	<body>
<script type="text/javascript">
	function displayTime(){
		var time=new Date();//新建一个date对象
		var strTime=time.toLocaleString();//转换成本地时间格式
		document.getElementById("timeDiv").innerText=strTime;
	}
	
	//每隔一秒调用一次displayTime()函数
	function start(){
		//从这行代码执行开始,则会不间断的,每隔1000毫秒调用一次displayTime()函数
		v=window.setInterval("displayTime()",1000);
	}
	
	function stop(){
		window.clearInterval(v);
	}
</script>
<input type="button" value="显示系统时间" onclick="start()"/>
<input type="button" value="暂停系统时间" onclick="stop()"/>
<div id="timeDiv"></div>
	</body>
</html>
8.7.2、数组内置类
  • 数组定义用[],而java的数组定义用{}
  • 数组类型随意
  • 数组可越界扩容
//创建长度为0的数组
var arr=[];
document.write(arr.length+"<br>");// 0

//数据类型随意
var arr2=[true,3.14,"abc",100];
document.write(arr2.length+"<br>");// 4

arr2[6]="six";//自动扩容

document.write(arr2.length+"<br>");// 7

//遍历
for(var i=0;i<arr2.length;i++){
	document.write(arr2[i]+" ");
}

另一种创建数组对象的方式

var a=new Array();
alert(a.length);// 0

var a2=new Array(3);// 3表示长度
alert(a2.length);// 3

var a3=new Array(3,2);//长度为最后一个(覆盖)
alert(a3.length);

数组相关的方法:
连接字符串join(“连接符”);
数组末尾添加元素push(元素);
数组末尾弹出元素pop();
反转数组reverse();

var a=[1,2,3,4];
var str=a.join("-");
alert(str);//"1-2-3-4"

//在数组的末尾添加一个元素
a.push(10);
alert(a.join("-"));//"1-2-3-4-10"

//将末尾元素弹出
var endElt=a.pop();
alert(endElt);// 10
alert(a.join("-"));//"1-2-3-4"

//注意:JS中的数组可以自动模拟栈数据结构:后进先出,先进后出原则。
//push压栈
//pop弹栈

//反转数组
a.reverse();
alert(a.join("-"));//"4-3-2-1"

9.BOM

BOM编程中,window是顶级对象,代表浏览器窗口。

9.1、open和close

window有open()和close()方法,可以开启窗口和关闭窗口。
打开window.open()
关闭window.close()

<input type="button" value="开启百度(新窗口)" onclick="window.open('http://www.baidu.com')"/>
<input type="button" value="开启百度(当前窗口)" onclick="window.open('http://www.baidu.com','_self')"/>
<input type="button" value="开启百度(新窗口)" onclick="window.open('http://www.baidu.com','_blank')"/>
<input type="button" value="开启百度(父窗口)" onclick="window.open('http://www.baidu.com','_parent')"/>
<input type="button" value="开启百度(顶级窗口)" onclick="window.open('http://www.baidu.com','_top')"/>

<input type="button" value="打开表单验证" onclick="window.open('002.open.html')"/>

补充当前窗口与顶级窗口
覆盖整个页面的窗口只有一个可以理解为顶级窗口

将当前窗口设置为顶级窗口 代码演示

if(window.top!=window.self){					window.top.location=window.self.location;
}
9.2、弹出框
  • 消息框window.alert(“消息框”)
  • 确认框window.confirm(“确认框”)

弹出消息框

<input type="button" value="弹出消息框" onclick="window.alert('消息框!')"/>

弹出确认框

<script>
	function del(){
		/*
			var ok=window.confirm('亲,确认删除数据吗?');
			//返回值为true或false
			//点击确定为true
			//点击false为true
			if(ok){
				alert("删除数据ing");
			}
		*/
		if(window.confirm('亲,确认删除数据吗?')){
			alert("删除数据ing");
		}
	}
</script>
<input type="button" value="弹出确认框" onclick="del()"/>
9.3、历史记录

历史纪录的后退window.history.back()或者是window.history.go(-1)
历史纪录的前进window.history.go(1)

<input type="button" value="后退" onclick="window.history.back()"/>
<input type="button" value="后退" onclick="window.history.go(-1)"/>
<input type="button" value="前进" onclick="window.history.go(1)"/>
9.4、设置地址栏的url
var xx=window.location;
xx.href="修改后的url";

或者window.location.href=“修改后的url”;
或者window.location=“修改后的url”;
或者document.location.href=“修改后的url”;
或者document.location=“修改后的url”;

样例演示

<script>
	function goUrl(){
		var xx=window.location;
		xx.href=document.getElementById("mytext").value;
	}
</script>
<input type="text" name="url" id="mytext"/>
<input type="button" value="转入新页面" onclick="goUrl()"/>
9.5、总结:有哪些方法可以通过浏览器往服务器发请求

1.表单form的提交====
2.超链接。点击进入
3.document.location=“url”;
4.window.location=“url”;
5.window.open(“url”);
6.直接在浏览器地址栏上输入url,然后回车(手动输入,也是动态的)

以上所有的请求均可以携带数据给服务器的,只有通过表单提交的数据才是动态的。

10.JSON

  • JavaScript Object Notation(JavaScript对象标记),简称JSON。
  • JSON是一种轻标准的轻量级的数据交换格式
  • 特点是:体积小,易解析
  • JSON主要的作用是:一种标准的数据交换格式。
  • 在实际的开发中有两种数据交换格式使用最多,第一种是JSON,另一种是XML。XML体积较大,解析麻烦,但是有优点是:语法严谨。(银行通常会使用)
10.1、JSON的代码格式

两种数据要交换可以用JSON或者XML,通过与Java交换
对比一下数据的轻量级

//创建JSON对象(JSON也可以称为无类型对象。体积小,易解析。)
var studentObj={
	"sno":"110",
	"sname":"zhangsan",
	"sex":"男"
};

//访问JSON对象的属性
alert(studentObj.sno+","+studentObj.sname+","+studentObj.sex);

数组遍历

//JSON数组
var students=[
	{"sno":"1","sname":"zhangsan","sex":"男"},
	{"sno":"2","sname":"xiaowang","sex":"女"},
	{"sno":"3","sname":"zhaoliu","sex":"男"}
];

//遍历JSON数组
for(var i=0;i<students.length;i++){
	var student=students[i];
	alert(student.sno+","+student.sname+","+student.sex);
}

JSON的代码格式为

var jsonObj={
	"属性名":"属性值",
	"属性名":"属性值",
	"属性名":"属性值",
	"属性名":"属性值",
	"属性名":"属性值",
	......
};

对比
之前没有使用JSON的时候,定义类,创建对象,访问对象那个的属性

Student=function(sno,sname,sex){
	this.sno=sno;
	this.sname=sname;
	this.sex=sex;
}
var student=new Student("123","ikun","男");
alert(student.sno+","+student.sname+","+student.sex);
10.2、JSON对象
  • 通过键值对进行编写
  • 可以json嵌套json
var user={
	"usercode":110,
	"username":"张三",
	"sex":true,
	"address":{
		"city":"山东",
		"street":"烟台",
		"zipcode":"27777"
	},
	"aihao":["smoke","drink","code"]
};

//访问人名以及居住的城市
alert(user.username+"居住在"+user.address.city);	

代码示例:
自行设计JSON格式的数据,这个JSON格式的数据可以描述整个班级中每一个学生的信息,以及总人数信息。

var jsonDate={
	"total":3,
	"students":[
		{"name":"zhangsan","no":"1"},
		{"name":"lisi","no":"2"},
		{"name":"wangwu","no":"3"}
	]
};

alert("总人数:"+jsonDate.total);
for(var i=0;i<jsonDate.students.length;i++){
	var stu=jsonDate.students[i];
	alert(stu.name+","+stu.no);
}
10.3、eval()函数

通过eval连接前后端的函数
功能:将字符串当作一段JS代码解释并执行
例如:window.eval(“var i=100”);

主要在实战中

  • java连接数据库,查询数据之后,将数据在java程序中拼接成JSON格式的"字符串",将JSON格式的字符串相应到浏览器
  • java响应到浏览器上的仅仅是一个"JSON格式的字符串",还不是一个JSON对象
  • 可以使用eval函数,将JSON格式的字符串转换成JSON对象
//这是java程序发送过来的json格式的字符串
//\这是转义字符,字符串用双引号括起来,那么字符串中想要表达双引号,要用转义字符。
var fromJava="{\"name\":\"zhangsan\",\"password\":\"123\"}";
//将以上的json格式的字符串转换成json对象
window.eval("var jsonObj="+fromJava);
//访问json对象
alert(jsonObj.name+","+jsonObj.password);
//还可以采用这种方式
alert(jsonObj["name"]+jsonObj["password"]);		
10.4、设置table的tbody

将java中的数据展示到table中
表格页面的html格式如下

<input type="button" value="显示员工信息列表" id="displayBtn"/>
<h2>员工信息表</h2>
<hr>
<table id="emptbody" border="1px" width="50%">
	<tr>
		<th>1111</th>
		<th>SMITH</th>
		<th>800</th>
	</tr>
	<tr>
		<td>2222</td>
		<td>JACKSON</td>
		<td>2000</td>
	</tr>
	<tr>
		<td>3333</td>
		<td>KULI</td>
		<td>1500</td>
	</tr>
</table>
总共<span id="count">0</span>条数

本身tbody没有数据,通过点按钮,将json数据显示到页面上
json的数据如下

var data={
	"total":4,
	"emps":[
		{"empno":7701,"ename":"SMITH","sal":800},
		{"empno":7702,"ename":"SMITH2","sal":1800},
		{"empno":7703,"ename":"SMITH3","sal":2800},
		{"empno":7704,"ename":"SMITH4","sal":3800},
	]
};

通过点击按钮框实现的代码逻辑如下
每循环一次加一个html的页面以及条数
数据加载到tbody中

document.getElementById("emptbody").innerHTML
document.getElementById("count").innerHTML=data.total;

完整代码演示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>设置table的tbody</title>
	</head>
	<body>
		<script type="text/javascript">
			var data={
				"total":4,
				"emps":[
					{"empno":7701,"ename":"SMITH","sal":800},
					{"empno":7702,"ename":"SMITH2","sal":1800},
					{"empno":7703,"ename":"SMITH3","sal":2800},
					{"empno":7704,"ename":"SMITH4","sal":3800}
				]
			};
			//把json代码数据展示到table中
			window.onload=function(){
				var btnElt=document.getElementById("displayBtn");
				btnElt.onclick=function(){
					var emps=data.emps;
					var html="";
					for(var i=0;i<emps.length;i++){
						var emp=emps[i];
						html+="</tr>";
						html+="<td>"+emp.empno+"</td>";
						html+="<td>"+emp.ename+"</td>";
						html+="<td>"+emp.sal+"</td>";
						html+="</tr>";
					}
					document.getElementById("emptbody").innerHTML=html;
					document.getElementById("count").innerHTML=data.total;
				}
			}
		</script>
		<input type="button" value="显示员工信息列表" id="displayBtn"/>
		<h2>员工信息表</h2>
		<hr>
		<table id="emptbody" border="1px" width="50%">
			<!-- <tr>
				<th>1111</th>
				<th>SMITH</th>
				<th>800</th>
			</tr>
			<tr>
				<td>2222</td>
				<td>JACKSON</td>
				<td>2000</td>
			</tr>
			<tr>
				<td>3333</td>
				<td>KULI</td>
				<td>1500</td>
			</tr> -->
		</table>
		总共<span id="count">0</span>条数
	</body>
	
</html>
10.5、面试题

在JS当中:[]和{}有什么区别

  • []是数组
  • {}是JSON
    java中的数组:int[] arr={1,2,3};
    JS中的数组:var arr=[1,2,3];
    JSON:var jsonObj={“email”:“242@qq.com”,“age”:15};

  1. 1-9 ↩︎

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jm呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值