web前端之JavaScript
JavaScript概述
JavaScript历史
在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司。
由于网景公司希望能在静态HTML页面上添加一些动态效果,于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。你没看错,这哥们只用了10天时间。
为什么起名叫JavaScript?原因是当时Java语言非常红火,所以网景公司希望借Java的名气来推广,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。
ECMAScript来源
因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。
所以简单说来就是,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。
那为什么不直接把JavaScript定为标准呢?因为JavaScript是网景的注册商标。
一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
- 核心(ECMAScript)
- 文档对象模型(DOM) Document object model (整合js,css,html)
- 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
JavaScript基础
JavaScript用法
第一种:JavaScript放在HTML中(推荐)
HTML中的脚本必须位于<script>与</script>标签之间
script脚本可被放置在HTML页面的<body>和 <head> 部分中。
<head>中的JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
alert("xixi")
</script>
</head>
<body> </body>
</html>
<body>中的JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<script>
document.write("body中的script")
</script>
</body>
</html>
第二种:导入js文件方式
自已写JavaScript的语句单独放在一个文件
注:在head标签里面的导入
<script src="hello.js"></script>
JavaScript输出
JavaScript 可以通过不同的方式来输出数据:
- 使用 window.alert() 弹出警告框。
- 使用 document.write() 方法将内容写到 HTML 文档中。
- 使用 innerHTML 写入到 HTML 元素。
- 使用 console.log() 写入到浏览器的控制台。
JavaScript注释
单行注释:双斜杠
//
多行注释
多行注释以 /* 开始,以 */ 结尾。
变量
数学代数
x=5
y=6
z=x+y
在代数中,我们使用字母(比如 x)来保存值(比如 5)
通过上面的表达式 z=x+y,我们能够计算出 z 的值为 11
在 JavaScript 中,这些字母被称为变量。
1. 声明变量是不用声明变量类型,全部使用var关键字
<body>
<script>
var varname;
varname = "xixi" /*变量名赋值*/ document.write(varname) </script>
</body>
2. 一行可以声明多个变量,并且可以是不同类型
var name='xixi',age=18,gender='male'
document.write(name,age,gender)
3. (了解) 声明变量时 可以不用var. 如果不用var 那么它是全局变量.
4. 变量命名,首字符只能是字母,下划线,$美元符 三选一,且区分大小写,x与X是两个变量
5. 变量还应遵守以下某条著名的命名规则:
Camel 标记法
首字母是小写的,接下来的字母都以大写字符开头。例如:
var myTestValue = 0, mySecondValue = "hi";
Pascal 标记法
首字母是大写的,接下来的字母都以大写字符开头。例如:
Var MyTestValue = 0, MySecondValue = "hi";
匈牙利类型标记法
在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i 表示整数,s 表示字符串,如下所示“
Var iMyTestValue = 0, sMySecondValue = "hi";
JavaScript代码基础规范
1. 每行结束可以不加分号. 没有分号会以换行符作为每行的结束
var a=1;b=2;
a=1 b=2;------错误 a=1
b=2 //推荐
var a=1;
var b=2; {
a=1;
b=2;
//推荐加tab
a=1;
b=2;
2. 使用{}来封装代码块
常量和标识符
常量:直接在程序中出现的数据值
标识符:
1. 由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
2. 常用于表示函数、变量等的名称
3. 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
4. JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符
数据类型
1. 数字类型(Number)
简介
最基本的数据类型
不区分整型数值和浮点型数值
所有数字都采用64位浮点格式存储,相当于Java和C语言中的double格式
能表示的最大值是±1.7976931348623157 x 10308
能表示的最小值是±5 x 10 -324
整数:
在JavaScript中10进制的整数由数字的序列组成
精确表达的范围是
-9007199254740992 (-253) 到 9007199254740992 (253)
超出范围的整数,精确度将受影响
浮点数:
使用小数点记录数据
例如:3.4,5.6
使用指数记录数据
例如:4.3e23 = 4.3 x 1023
16进制和8进制数的表达:
16进制数据前面加上0x,八进制前面加0
16进制数是由0-9,A-F等16个字符组成
8进制数由0-7等8个数字组成
2. 字符串(String)
简介
是由Unicode字符、数字、标点符号组成的序列
字符串常量首尾由单引号或双引号括起
JavaScript中没有字符类型
常用特殊字符在字符串中的表达
字符串中部分特殊字符必须加上右划线\
常用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线
3. String数据类型的使用
字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。
4. 布尔值(Boolean)
布尔值和布尔代数的表示完全一致,一个布尔值只有true、false两种值,要么是true,要么是false,可以直接用true、false表示布尔值,也可以通过布尔运算计算出来:
5. Null 和 Undefined
Undefined 类型 Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。 当函数无明确返回值时,返回的也是值 "undefined"; Null 类型 另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。 尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。 var person=new Person() var person=null
数据类型转换
JavaScript属于松散类型的程序语言
变量在声明的时候并不需要指定数据类型
变量只有在赋值的时候才会确定数据类型
表达式中包含不同类型数据则在计算过程中会强制进行类别转换 数字 + 字符串:数字转换为字符串 数字 + 布尔值:true转换为1,false转换为0 字符串 + 布尔值:布尔值转换为字符串true或false
强制类型转换函数
函数parseInt: 强制转换成整数 例如parseInt("6.12")=6 ; parseInt(“12a")=12 ; parseInt(“a12")=NaN ;parseInt(“1a2")=1 函数parseFloat: 强制转换成浮点数 parseFloat("6.12")=6.12 函数eval: 将字符串强制转换为表达式并返回结果 eval("1+1")=2 ; eval("1<2")=true
类查询函数
ECMAScript 提供了 typeof 运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。
函数typeof :查询数值当前类型 (string / number / boolean / object ) 例如typeof("test"+3) "string"
例如typeof(null) "object "
例如typeof(true+1) "number"
例如typeof(true-false) "number"
ECMAScript运算符
算数运算符
加(+)、 减(-)、 乘(*) 、除(/) 、余数(% ) 加、减、乘、除、余数和数学中的运算方法一样 例如:9/2=4.5,4*5=20,9%2=1 -除了可以表示减号还可以表示负号 例如:x=-y +除了可以表示加法运算还可以用于字符串的连接 例如:"abc"+"def"="abcdef"
递增(++) 、递减(--)
假如x=2,那么x++表达式执行后的值为3,x--表达式执行后的值为1
i++相当于i=i+1,i--相当于i=i-1
递增和递减运算符可以放在变量前也可以放在变量后:--i
注:放在前面和放在后面,注意输出的位置 var i=1;
console.log(i++);
console.log(++i);
console.log(i--);
console.log(--i);
逻辑运算符
等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) 、大于等于(>=) 、小于等于(<=)
与 (&&) 、或(||) 、非(!)
1 && 1 = 1 1 || 1 = 1
1 && 0 = 0 1 || 0 = 1
0 && 0 = 0 0 || 0 = 0 !0=1
!1=0
逻辑and运算符(&&)
逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。
如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:
- - 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
- - 如果两个运算数都是对象,返回第二个对象。
- - 如果某个运算数是 null,返回 null。
- - 如果某个运算数是 NaN,返回 NaN。
- - 如果某个运算数是 undefined,返回undefined。
逻辑or运算符(||)
与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:
- - 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
- - 如果两个运算数都是对象,返回第一个对象。
- - 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
- - 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
- - 如果某个运算数是 undefined,返回undefined。
ECMAScript 赋值运算符
赋值 等号(=)
JavaScript中
=代表赋值,
两个等号(==)表示判断是否相等
例如,x=1表示给x赋值为1
if (x==1){...}程序表示当x与1相等时
if(x==“on”){…}程序表示当x与“on”相等时
配合其他运算符形成的简化表达式
例如i+=1相当于i=i+1,x&=y相当于x=x&y
ECMAScript等性运算符
执行类型转换的规则如下:
- - 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
- - 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
- - 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
- - 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则:
- - 值 null 和 undefined 相等。
- - 在检查相等性时,不能把 null 和 undefined 转换成其他值。
- - 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
- - 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
ECMAScript 关系运算符
var bResult = "Blue" < "alpha";
alert(bResult); //输出 true
在上面的例子中,字符串 "Blue" 小于 "alpha",因为字母 B 的字符代码是 66,字母 a 的字符代码是 97。
注:它是根据ascii码表,来做的排序
比较数字和字符串
另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
var bResult = "25" < "3";
alert(bResult); //输出 "true"
上面这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。也是根据ascii码表来排序的
总结:
比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
比较运算符两侧如果都是字符串类型,比较的是最高位的ascii码,如果最高位相等,继续取第二位比较.
控制语句
if语句
通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。
在 JavaScript 中,我们可使用以下条件语句:
- - if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
- - if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
- - if...else if....else 语句- 使用该语句来选择多个代码块之一来执行
if.....else if ....else语句
if (condition1)
{
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
当条件 2 为 true 时执行的代码
}
else
{
当条件 1 和 条件 2 都不为 true 时执行的代码
}
if可单独使用
if (condition)
{
当条件为 true 时执行的代码
}
判断今天是星期几,输出相应星期几代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script>
var x= new Date().getDay();
// 这是获取今天的星期值,0为星期天
// document.write(x)
if (x==1){
y="星期一";
document.write(y)
} else if (x==2){
y="星期二";
document.write(y)
}
else if (x==6){
y="星期六";
document.write(y)
}
else if (x==0){
y="星期日";
document.write(y)
}
else {
y = "未定义";
document.write(y)
}
</script>
</body>
</html>
switch 选择控制语句
switch 语句用于基于不同的条件来执行不同的动作。
语法:
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 2 不同时执行的代码
}
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。(注:不加break,会执行下一个case语句,直到遇到break才会结束case语句)
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script> // 这是获取今天的星期值,0为星期天
// document.write(x)
var d=new Date().getDay();
switch (d)
{
case 0:x="今天是星期日" ;document.write(x);
break;
case 1:x="今天是星期一";document.write(x);
break;
case 2:x="今天是星期二";document.write(x);
break;
case 3:x="今天是星期三";document.write(x);
break;
case 4:x="今天是星期四";document.write(x);
break;
case 5:x="今天是星期五";document.write(x);
break;
case 6:x="今天是星期六";document.write(x);
break;
}
</script>
</body>
</html>
switch和if语句的比较
- switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
- switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择执行哪一个case的语句块
- if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。当然还是要根据实际来选择用if还是用switch语句
for 循环语句
JavaScript 支持不同类型的循环:
- - for - 循环代码块一定的次数
- - for/in - 循环遍历对象的属性
- - while - 当指定的条件为 true 时循环指定的代码块
- - do/while - 同样当指定的条件为 true 时循环指定的代码块
for 循环
语法:
for循环基本格式
for (初始化;条件;增量){
语句1;
........
}
循环5次代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script> for (var i=0; i<5; i++) { document.write("数字"+i+"<br>");
}
</script>
</body>
</html>
for/in循环
用于遍历对象的属性
代码示例:遍历一个数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script> var person={fname:"xi",lname:"xi",age:20}; for (x in person) {
document.write(x+"<br>");// 循环key document.write(person[x]+"<br>"); // 循环value
}
</script>
</body>
</html>
while循环语句
while循环会在指定条件为真的时候执行
语法:
while (条件)
{
需要执行的代码
}
代码示例:
只要变量 i 小于 5,循环将继续运行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script> var i=0;
while(i<5){
document.write("number"+i+"<br>");
i++;
}
</script>
</body>
</html>
do/while循环
do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。
语法:
do
{
需要执行的代码
}
while (条件);
只要变量 i 小于 5,循环将继续运行代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script> var i=0;
do {
document.write("number"+i+"<br>");
i++ }
while (i<5); </script>
</body>
</html>
推荐用直接用while循环,少用do/while循环.
JavaScript异常处理
针对代码出现错误的时候,做出相应的处理
语法:
try {
//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}
注:主动抛出异常 throw Error('xxxx')
JavaScript对象
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...
此外,JavaScript 允许自定义对象
所有事物都是对象
JavaScript 提供多个内建对象,比如 String、Date、Array 等等,对象只是带有属性和方法的特殊数据类型
访问对象的属性
objectName.propertyName
访问对象的方法
objectName.methodName()
创建对象
创建对象实例
例:创建了对象的一个新实例,并向其添加了四个属性:
person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue"
object对象
所有的对象都有这个Object对象继承而来;object对象中的所有属性都会出现在其他的对象中
ToString() : 返回对象的原始字符串表示。
ValueOf() : 返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
11中内置对象
Array ,String , Date, Math, Boolean, Number Function, Global, Error, RegExp , Object
在这里我只写了两种对象,
内置对象分类
String对象
字符串属性和方法
属性:
length 字符串的长度(字符串的个数)
prototype
constructor
方法:
charAt()
charCodeAt()
concat()
fromCharCode()
indexOf()
lastIndexOf()
match()
replace()
search()
slice() 字符串切片
split() 字符串分割
substr()
substring()
toLowerCase() 大写转小写
toUpperCase() 小写转大写
valueOf()
array对象(数组)
什么是数组
数组对象是使用单独的变量名来存储一系列的值。
数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值。
数组中的每个元素都有自己的的ID,以便它可以很容易地被访问到。
var cars = ["Saab", "Volvo", "BMW"]
第一个数组元素的索引值为 0,第二个索引值为 1
数组对象的属性
方法 描述
concat() 连接两个或更多的数组,并返回结果。
every() 检测数值元素的每个元素是否都符合条件。
filter() 检测数值元素,并返回符合条件所有元素的数组。
indexOf() 搜索数组中的元素,并返回它所在的位置。
join() 把数组的所有元素放入一个字符串。
lastIndexOf() 返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
map() 通过指定函数处理数组的每个元素,并返回处理后的数组。
pop() 删除数组的最后一个元素并返回删除的元素。
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 反转数组的元素顺序。
shift() 删除并返回数组的第一个元素。
slice() 选取数组的的一部分,并返回一个新数组。
some() 检测数组元素中是否有元素符合指定条件。
sort() 对数组的元素进行排序。
splice() 从数组中添加或删除元素。
toString() 把数组转换为字符串,并返回结果。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
valueOf() 返回数组对象的原始值
JavaScript函数定义
JavaScript使用关键字function定义函数
函数可以通过声明定义,也可以是一个表达式(也可以叫匿名函数)。
函数声明语法
parameters参数
function functionName(parameters) {
执行的代码
}
函数的表达式
函数的表达式可以存储在变量中
例:
var x = function (a, b) {return a * b};
function()构造函数
通过new Function()来定义构造函数
例:
var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3);
自调用函数
函数表达式可以 "自调用"。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:
函数是对象
在 JavaScript 中使用 typeof 操作符判断函数类型将返回 "function" 。
但是JavaScript 函数描述为一个对象更加准确。
JavaScript 函数有 属性 和 方法。
arguments.length 属性返回函数调用过程接收到的参数个数:
function myFunction(a, b) {
return arguments.length;
}
函数参数
函数显式参数(Parameters)与隐式参数(Arguments)
functionName(parameter1, parameter2, parameter3) {
// 要执行的代码……
}
注:
函数显式参数在函数定义时列出。
函数隐式参数在函数调用时传递给函数真正的值。
参数的规则
JavaScript函数定义是显示参数没有指定数据类型
JavaScript函数对隐式参数没有进行类型检测
JavaScript函数对隐式参数的个数没有进行检测。
默认参数
如果函数在调用时未提供隐式参数,参数会默认设置为: undefined
有时这是可以接受的,但是建议最好为参数设置一个默认值:
函数调用
JavaScript函数有4种调用方式
每种方式的不同方式在于this的初始化
this关键字
在Javascript中,this指向函数执行时的当前对象。
注: this 是保留关键字,你不能修改 this 的值。
第一种:作为一个函数调用
第二种:函数作为方法调用
第三种:使用构造函数调用
第四种:作为函数方法调用函数
BOM对象
BOM(browser object model)浏览器对象模型,可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。
使 JavaScript 有能力与浏览器“对话,
windows对象
所有浏览器都支持 window 对象。它表示浏览器窗口。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。
全局函数是 window 对象的方法。
甚至 HTML DOM 的 document 也是 window 对象的属性之一:
windows对象方法
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt() 显示可提示用户输入的对话框。 open() 打开一个新的浏览器窗口或查找一个已命名的窗口。
close() 关闭浏览器窗口。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval() 取消由 setInterval() 设置的 timeout。
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
scrollTo() 把内容滚动到指定的坐标。
history对象
histor对象方法
- history.back() - 与在浏览器点击后退按钮相同
- history.forward() - 与在浏览器中点击按钮向前相同
- history.go() 加载 history 列表中的某个具体页面。
location对象
Location 对象包含有关当前 URL 的信息。
Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。
location对象方法
- location.assign(URL) 从这网页跳转到另一个网页,可返回
- location.reload() 刷新网页
- location.replace(newURL)//注意与assign的区别 这是把当前网页替换,不可以返回
DOM对象
HTML DOM(文档对象模型)
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树
DOM树
DOM节点
根据W3C和HTML DOM标准,HTML文档中的所有内容都是节点(NODE)
- - 整个HTML文档是一个文档节点(document对象)
- - 每个 HTML 元素是元素节点(element 对象)
- - HTML 元素内的文本是文本节点(text对象)
- - 每个 HTML 属性是属性节点(attribute对象)
- - 注释是注释节点(comment对象)
查找HTML元素
通常,通过 JavaScript,您需要操作 HTML 元素。
为了做到这件事情,您必须首先找到该元素。常用有三种方法来做这件事:
- 通过id找到HTML元素 通过使用 document.getElementById() 方法
- 通过标签名找到 HTML 元素 通过使用 document.getElementsByTagName() 方法
- 通过类名找到 HTML 元素 通过使用 document.getElementsByClassName() 方法
注:如果未找到则是返回的null值
元素属性
- attributes - 节点(元素)的属性节点
- nodeType – 节点类型
- nodeValue – 节点值
- nodeName – 节点名称
- innerHTML - 节点(元素)的文本值
导航属性
- parentNode - 节点(元素)的父节点
- firstChild – 节点下第一个子元素
- lastChild – 节点下最后一个子元素
- childNodes - 节点(元素)的子节点
- parentElement // 父节点标签元素
- children // 所有子标签
- firstElementChild // 第一个子标签元素
- lastElementChild // 最后一个子标签元素
- nextElementtSibling // 下一个兄弟标签元素
- previousElementSibling // 上一个兄弟标签元素
节点树中的节点彼此拥有层级关系
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
- 在节点树中,顶端节点被称为根(root)
- 每个节点都有父节点、除了根(它没有父节点)
- 一个节点可拥有任意数量的子
- 同胞是拥有相同父节点的节点
下面的图片展示了节点树的一部分,以及节点之间的关系:
HTML DOM Event事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。
onmouseleave 鼠标从元素离开 onselect 文本被选中。
onsubmit 确认按钮被点击。
两种为元素添加附加事件属性的方式
第一种:在标签内部做添加事件
第二种:通过JavaScript找到要做绑定事件标签,在做相应的添加事件
<div onclick="alert(123)">点我呀</div>
<p id="abc">试一试!</p> <script>
var ele=document.getElementById("abc"); ele.onclick=function(){
alert("hi");
}; </script>
onload事件
onload 属性开发中 只给 body元素加.
这个属性的触发 标志着 页面内容被加载完成.
应用场景: 当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性.例如:处理cookie
onsubmit事件
是当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交..
阻止表单提交的两种方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form id="form">
<input type="text"/>
<input type="submit" value="点我!" />
</form> <script type="text/javascript">
//阻止表单提交方式1(). return false
//onsubmit 命名的事件函数,可以接受返回值. 其中返回false表示拦截表单提交.其他为放行. var ele=document.getElementById("form");
ele.onsubmit=function(event) {
console.log(event);
// alert("验证失败 表单不会提交!");
// return false; // 阻止表单提交方式2 event.preventDefault(); ==>通知浏览器不要执行与事件关联的默认动作。
alert("验证失败 表单不会提交!");
event.preventDefault(); }
</script>
</body>
</html>
Event对象
Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.
HTML DOM - 改变CSS
语法:
document.getElementById(id).style.property=新样式
HTML DOM 元素(节点)增删改
增加的语法
document.createElement(name)创建元素
appendChild();将元素添加
代码示例:添加一个新段落
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div> <script>
var para=document.createElement("p");
var node=document.createTextNode("这是一个新段落。");
para.appendChild(node); var element=document.getElementById("div1");
element.appendChild(para);
</script>
删除的语法
获得要删除的元素
使用removeChild()方法删除
代码示例:通过删除一个p元素
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>
修改的方法
第一种:
使用上面增和删结合完成修改
第二种:
使用setAttribute();方法修改属性
使用innerHTML属性修改元素的内容
web前端之JavaScript的更多相关文章
- 好程序员web前端分享javascript关联数组用法总结
好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...
- Python web前端 05 JavaScript
Python web前端 05 JavaScript 一.获取元素 1.初识JavaScript /* .. */ #这是多行注释 // #这是单行注释 #JavaScript是一种脚本语言,是一种动 ...
- web前端分享JavaScript到底是什么?特点有哪些?
web前端分享JavaScript到底是什么?特点有哪些?这也是成为web前端工程师必学的内容.今天为大家分享了这篇关于JavaScript的文章,我们一起来看看. 一.JavaScript是什么? ...
- 1+x 证书 Web 前端开发 JavaScript 专项练习
官方QQ群 1+x 证书 Web 前端开发 JavaScript 专项练习 http://blog.zh66.club/index.php/archives/198/
- [总结]web前端常用JavaScript代码段及知识点集锦
DOM相关 判断浏览器是否支持placeholder属性 function placeholderSupport() { return 'placeholder' in document.create ...
- WEB前端常用JavaScript代码整理
文章目录 html代码用JS动态加载进页面 JS判断用户访问的是PC还是mobile或者微信浏览器 判断浏览器的简单有效方法 点击某个div区域之外,隐藏该div 如何在手机上禁止浏览器的网页滚动 改 ...
- Web前端基础——JavaScript
一.脚本程序和 javascrip Javascript脚 本是嵌套在HTML网页中的程序语言,浏览器带有脚本程序的解释器(脚本引擎).脚本也可以有多种,比如还有vbscript, JScrip ...
- Python之路day13 web 前端(JavaScript,DOM操作)
参考链接:http://www.cnblogs.com/wupeiqi/articles/5433893.html day13 1. CSS示例 2. JavaScript 3. DOM操作 上节内容 ...
- Web前端开发JavaScript提高
JavaScript 一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它的解释器被称为JavaScript引擎,是浏览器的一部分,并且是被广泛用于客户端的脚本语言,JavaS ...
随机推荐
- (回文串 Manacher)吉哥系列故事——完美队形II -- hdu -- 4513
http://acm.hdu.edu.cn/showproblem.php?pid=4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) ...
- 系统目录APK更新——权限问题
package com.example.wx; import java.io.File;import java.io.FileOutputStream;import java.io.IOExcepti ...
- hdu 2190 悼念512汶川大地震遇难同胞——重建希望小学
题目 这道题拿到的时候拼凑了一会,感觉挺难的,然后博客说是:递推,我觉得递推其实就是找规律. 这是别人的思路:对于n米的长度,可以是由n-1长度加1而来,对于增加的1,只有三块1*1的砖一种铺法: 还 ...
- Informatica增量抽取时间的设置
使用数据库或者系统变量的当前时间 Informatica中的$$SYSDATE是表示当前系统时间的系统变量. 通过这个变量,我们对每天抽取的数据可以使用以下表达式来实现增量抽取: 时间戳字段>= ...
- hdu 5007
http://acm.hdu.edu.cn/showproblem.php?pid=5007 字符串处理 暴力 #include <cstdio> #include <cstdlib ...
- matlab的特殊字符(上下标和希腊字母等)
'T=25\circC',(摄氏度) 下标用 _(下划线) 上标用^ (尖号) 希腊字母等特殊字符用 α \alpha β \beta γ \gamma θ \theta Θ \Theta Г \Ga ...
- El中调用java静态方法
最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:$ ...
- CentOS 7 Flannel的安装与配置
1. 安装前的准备 etcd 3.2.9 Docker 17.12.0-ce 三台机器10.100.97.236, 10.100.97.92, 10.100.97.81 etcd不同版本之间的差别还是 ...
- linux系统编程之进程(七):system()函数使用
一,system()理解 功能:system()函数调用"/bin/sh -c command"执行特定的命令,阻塞当前进程直到command命令执行完毕 原型: int syst ...
- ftp服务器问题
最近ftp服务器迁移,遇到了521问题,可以尝试以下几种方法: 1,服务器管理器->Web服务器->FTP服务器安装完: 2,检查相应文件夹的权限是否足够, 3,检查ft ...