JS

JavaScript前世今生

JavaScript是什么,能干什么?

一个网页由3部分构成

         结构:HTML   页面由什么构成

                   手、胳臂、腿、脑子

         样式:css         字体大小 背景颜色 页面布局

                   腿长不长、长得好不好看

         行为:JavaScript 页面上的动态内容

                   溜达、跑步、干饭

 

JavaScript的使用

         在前端开发中JavaScript不能单独运行(除非你单独安装JavaScript运行环境除外)

JavaScript的运行需要挂在HTML上

         HTML时羊,JavaScript是羊毛,羊毛必须要长在羊的身上才行

         HTML中引用JavaScript代码、有2种方式

方式一:内部引用

使用script标签将JavaScript代码全部包裹起来

 

 

 

方式二:外部引用

(1)       将JavaScript的代码单独放在JavaScript文件中

(2)       在HTML中引入JavaScript文件

 

 

 

注意:在企业开发中我们一般使用的时外部引用,HTML与JavaScript是分开的,有利于分工合作更方便后期的维护

程序设计的基础

数据类型与变量

计算机程序就是去处理现实生活中各种数据的

 

 

 

数据包含三个属性

 

 

 

名字:闪购价

         值:36.80

         类型:小数类型

为什么需要数据类型:

         生活中存在不同的数据类型,计算机是为了帮助我们解决现实生活中的问题,那么程序和生活中数据产生映射,所以就有了数据类型

 

为什么需要变量:

         因为生活中的一些数据并不是一成不变的,他的值会改变,所以JavaScript里面就有了变量和他对应

变量

Var  variable是简写,声明一个变量

         Var name;

         Var price;

         Var num;

变量的命名

         规则:

(1)       一般情况下,变量是由大小写字母和数字组成,也可以使用$或者_等特殊字符

(2)       变量不能以数字开头

(3)       关键字不能用。关键字:这个名字已经被JavaScript内部使用了

         规范:

(1)       见明思意,看到这个名字你就知道这个变量是干嘛的

(2)       使用英文单词,不要使用拼音,不要使用中文

(3)       小驼峰,首字母小写。如果多个单词,单词首字母大写

数据类型

变量的类型是由变量的值来决定的,不同的类型系统给分布的内存空间也是不一样的。

 

 

 

字符串string

字符串是以单引号或者双引号 括起来的任意文本

 

 

 

 

数字number

数字:整数和小数,在JavaScript中不分整数和小数,统一number

布尔类型 Boolean

Boolean里面的值只有两个:true/false表示真或假

未定义undefined

Js中变量的类型是根据值来决定的,如果变量没有给值的话,没有东西:未定义

判断类型typeof

对象类型

对象类型是一个复杂的类型

怎么去描述一个人,这个人有身高、体重、年龄,这时候要定义一个对象属性

一切皆对象,对象包含属性

         人对象:身高、年龄、体重

         猫对象:名字、颜色、年龄

         学生对象:学号、成绩、班级

对象的定义

 

 

 

 

对象的访问:

         对象名称 . 属性名

语句与注释

语句

一行一行的代码称为语句,一个语句使用分号(;)作为结束符

虽然JavaScript不写分号没问题,但是你到了项目上线代码压缩的时候会出现问题,一定要写上分号。

注释

对代码的解释,为了让你和你的同事可以轻松的看你的代码

“注释不规范,同时两行泪”

注释写与不写都不会影响代码运行,注释和代码运行结构没有任何关系

方式一:单行注释

 

         //单行注释

 

方式二:多行注释

 

/*

         我是多行注释

         注释

*/

运算符

算数运算符

+、-、*、/(有小数)、%

 

 

 

++(自增)- -(自减)

本身可以不存在,程序员为了偷懒,引发的简介写法,存在就是简洁

n++等价于n=n+1

++n

n--

--n

n++和++n的区别

++在前面,先加后用

++在后面,先用后加

不管++在前面还是在后面,自身的值,只要运行了就会增加

 

 

 

赋值运算符

赋值:=

         将一个数赋值 给 前面的变量

复合赋值运算符:+= 、-= 、*= 、/= 、%=

         也是我为了偷懒印出来的一种简写

         n+=3 等价于 n=n+3

         n*=3 等价于 n=n*3

 

 

 

关系运算符

常见的关系运算符:< 、> 、<= 、>= 、==(等于) 、!=(不等于)

判断两个数字是否相等,使用两个等于(==)号,一个等于号(=)是赋值

特殊

         ===:绝对相等,值和类型都一样,结果才对

         !==:值和类型一个不等就不等

关系运算符之后结果是布尔类型

 

 

 

重点:==和===的区别

         ==比较的是值

         ===比较值和类型

逻辑运算符

比如说有一个考试,上午和下午,有两个成绩

(1)       上午和下午都通过才算通过 与 &&

(2)       只要有一个通过了就算通过 或 ||

与运算&&

并且,如果你有若干个条件、只有所有条件都成立,结果才成立

或运算||

或者,如果有若干条件、只要有一个表达式成立,结果就成立

非运算!

取反,真的变成假的,假的变成真的

 

 

 

三目运算符(三元运算符)

表达式?结果1:结果2

         如果表达式为true,就运行结果1

         如果表达式为false,就运行结果2

 

 

 

综合案例

 

 

 

程序的设计方法

程序设计方法的介绍

小时候,练习学习过程:描红-》临摹-》独立编写

写代码也是一样的,不要一上来就写,应该理解并熟悉业务,思路要清晰

程序设计3步走

(1)       形成解决问题的思路(很重要)

(2)       将我们解决问题的思路一步一步表达清楚(中文,图表)

(3)       将上面步骤一步一步翻译成计算机可以使用的语言(js php java)

案例:计算三位数个位数的和

 

 

 

案例:计算三角行面积

输入三角形三个边长,根据海伦公式计算三角行面积,海伦公式

 

 

 

Math.sqrt(25)=5;

错误与程序调试

程序的错误

错误:程序并没有像我们想想那样运行成功。程序中,错误可以分为两种

语法错误

编写的代码没有按照语言的要求去编写

alert()写成了alort

缺少分号

在一些高级开发的工具中:一旦发生了错误里面会给提示

         如果代码中语法错误,后面不会继续运行

逻辑错误

代码可以正常运行,但是运行的结果和我们的期望的不一样

这种错误比较不好解决,使用单步调试(aebug调试)去解决

谷歌(chrome)浏览器去调试错误

语法错误

(1)       在浏览器中,鼠标点击右键-》检查-》console

 

 

 

(2)       错误查看

可以定位 那个 文件 哪一行报错

 

 

 

(3)       找到对应的文件,进行修改

改完一处之后,重新运行,如果有错误继续解决-》直到没有错误

逻辑错误

办法:单步调试,代码一行一行的去执行,去看每一行的执行结果和期望是否一样,从而确认哪一行有错误

(1)找到要调试的代码

 

 

 

(2)打断点,在行号的地方,点击一下,会出现一个箭头

 

 

 

(3)刷新浏览器

 

 

 

(4)       定位错误

每执行一行代码,看你的运行结果和期望的是否一致,如果不一致,说明该行代码有问题-》那行代码有问题就解决那行

 

 

 

(5)       修改代码,重新执行,如果还不对继续单步调试

选择结构

三大结构

程序中有三大结构:顺序、选择、循环

顺序结构:代码从上到下一行一行的执行

选择结构:代码有分支,有选择

循环结构:重复执行 一段 代码

为什么需要选择结构

         比如三角形面积的案例,当你输入的三条边不能组成三角形的时候,不能使用公

式计算

         在我们生活中也有很多选择

                   比如:马上放假了,你有女朋友,你可以带着女朋友出去浪,如果煤油,自己在家         带着

                   比如:口袋里面钱的多少,你有100元今晚喝酒。否则吃泡面

         程序解决我们现实生活中的问题,生活中存在选择,所以程序必定存在选择

基本if语法

         if:如果

         else:否则

 

         if(表达式A){、

         表达式A成立运行这里的代码

         }else{

         表达式A不成立运行这里的代码

         }

注意:

(1)       表达的是A的运行结果是一个boolean类型

(2)       else后面的那一块并不是一定需要写的,你可以根据自己的业务来定

案例:绝对值案例

输入一个数,如果这个数是负数,转成正数,如果输入的是正数,直接输出

 

 

 

案例:计算三角形面积

当你输入三个边不能组成三角形直接输出文字“输入三边不能构成三角形”,能组成三角形直接输出面积

 

 

 

 

 

案例:判断一个数字是否为水仙花数

三位数,各个位数的立方和相加等于本身

 

 

 

If语句嵌套

if嵌套

基本语法:

         if(表达式1){

                   if(表达式2){

                   }

         }

 

案例:献血案例

根据性别和体重计算输血量,女生体重不超过50kg输血量为200ml,否则为250ml。男性体重不超过60kg输血量为250ml,否则为300ml   

 

 

 

else if

语法:

         If(表达式1){

                   表达式1成立运行这里

         }else if(表达式2){

                   表达式2成立运行这里

         } else if(表达式3){

                   表达式3成立运行这里

         } else{

                   如果以上都不成立,运行这里的

         }

案例:成绩评语

90-100:真厉害 666

80-90:还可以

70-80:还有很大的提升空间

60-70:小心了,要挂了

<60:多半是废了

 

 

 

switch

问题:当你if分支比较多的时候,需要从上往下一个一个的分支去执行,执行效率非常低。需要我们对选择结构进行改进。使用switch就可以解决这个问题

switch基本语法

Switch:开关

语法:

         switch(a){

                   caseXX:{}

                   caseYY:{}

                   default:{}

         }

在执行过程中,a的值和那个分支后面的值一样,就运行哪个分支

case后面的值可以裂解为标号(程序中指令的地址)

如果a的值与后面case后面的标号都对应不上,就 运行default里面的代码

成绩评语 用switch

break:跳出当前循环不是必须写的

 

 

 

Switch的好处:

(1)    执行速度比else if要快,效率更高

(2)    选择结构会更加清晰,可以一目了然

案例:判断季节

         要求输入月份,判断月份所处的季节(12,1,2为冬季,以此类推)

 

 

 

案例:四则运算

输入数字和运算符自己输出结果

 

 

 

循环结构

循环结构的基本概念

循环:重复干一件事,重复执行一块代码

场景:

         快递员送快递:查看送件地址-》赶往目的地-》打电话通知收件人-》收件人签字-》支付快递  重复以上过程,知道所有快递都送完

         食堂阿姨:接过学生的餐盘-》询问你吃什么菜-》打菜,重复以上过程,直到所有的学生打饭完成

 

案例:计算平均分

 

 

 

以上这两种方案,去解决这个问题并不是很合适,如果你有40,400,40w的成绩的话,怎么办???

仔细观察方案2

         它一直在重复的做一件事(将数加到sum中),每次的数字不一样但是很类似

改进一下

 

 

 

如果成绩的个数发生改变只需要稍微改动代码即可

While

While当····则······当什么条件成立的时候,则一直重复,当条件不成立的时候,停止

案例:计算1~10的和

 

 

 

案例:输出所有的水仙花数

 

 

 

案例:GDP预测

 

 

 

循环的套路上传到这里

(1)       初始条件

(2)       循环条件

(3)       循环体(重复要做的事)

(4)       为下一步循环做准备

 

 

 

后续拿到一个问题,不要瞎想,就回答下面这4个问题:

(1)       初始状态是什么

(2)       重复条件是什么

(3)       重复要做什么

(4)       怎么过度到下一个循环

案例:计算圆周率

Π = (1 – 1/3 + 1/5 – 1/7 + ·····) *4计算到最后一项的绝对值小于

 

1-1/3+1/5-1/7+1/9变化

 

(+1/1)+(-1/3)+(+1/5)+(-1/7)+(+1/9)

变化之后,和我们之前解决的1+2+3+4+……10问题非常相似,都是累加的问题,只不过每次加的内容不一样

 每次化的内容,每一项的样子

 t = 符号 * 1 / 分母

(1)       初始状态是什么样子

Sum = 0

Sign = 1//符号

Deno = 1//分母

 

(2)       重复的条件

|t|>10-6

 

(3)       重复要做什么

Sum += t

 

(4)       怎么过渡到下一个循环

Sign = sign * -1

Deno = deno+2 

 

 

 

Do ····while

Do·····while循环是while的变种,和while循环是一样的,只是换了一种写法

语法:

         Do{

                   循环的内容

}while(循环的条件)

从语法上来看,循环体在循环条件前面,while 循环 的循环体在循环条件的后面,如果说循环条件一次都不成立,do····while循环体在前面可以运行一次,但是while一次都不会运行。

案例:计算1~10的和(do···while)

 

 

 

While和do····while的区别

Do····while至少循环一次,while可能一次都不循环

案例:找出所有水仙花数(do····while)

 

 

 

案例:GDP预测(do····while)

 

 

 

for循环

(1)       For循环是while循环的变种,和while循环的思想是一样的,只是换了一种写法而已能用for循环完成的都可以使用while完成,但是能用while完成的不一定能用for循环完成

(2)       在实际项目开发中,for循环的使用频率是最高的

For循环的基本语法

For(初始的条件;循环结束的条件;循环的步长){

         循环体;

}

初始的条件;循环结束的条件;循环的步长 =》 决定了循环的次数

案例:1~100的和(for循环)

 

 

 

案例:水仙花数(for)

 

 

 

案例:判断一个数是否为素数

素数:只能被1和他本身整除,这个数就是素数

判断数字n是否为素数,如果(2,n-1)找不到一个数字能把它整除那它就是素数,如果说你找到一个那他就不是素数

 

 

 

循环辅助语句

Break

跳出整个循环,循环遇到break就不循环了

你每天都要上课,那天退学了(break)永远都不会上课

案例:判断一个数是否为素数(改进)

 

 

 

案例:输出1~10

 

 

 

Continue

跳过本次循环,接着下次继续走

你每天都要上课,那天伤病了(continue)仅仅是今天不会上课

案例:输出1~10,广东人,很忌讳数字4

 

 

 

函数

函数的概念

为什么需要用到函数???

案例:找出所有水仙花数

方案一:

 

 

 

这样的方案比较麻烦阅读起来比较困难,从上往下看,不能立即段程序时干什么的

方案二:使用函数

 

 

 

这种解决方案,将一个复杂的问题变成两个简单的问题,以“量”克服“难”和“大”的问题

         IsSXH()他是一个很厉害的东西,你给他一个数字它可以立马告诉你这个数,是否 为水仙花数,他怎么判断的你不用管

         再主程序中不断地调用isSXH即可。

函数的思想:对于一个规模比较大、难度比较高的问题提供一个解决问题的思路,将问题进行拆分,分解成多个规模小,难度比较低的问题;如果分解之后依然比较大、难度比较高可以按照这个思路继续进行分解,知道分解后的问题足够小,简单。归纳“大事化小”

(1)       需要找出1~100的素数,假设有那么个人(函数)可以帮你判断这个函数是否为函数

(2)       假设今晚我想吃小龙虾:假设有那么个人(函数)可以帮你去市场买小龙虾;假设有人(函数)可以帮你清洗干净;假设没有人(函数)可以帮你爆炒小龙虾;对于你来说,你是非常轻松的,只需要负责调度安排即可

函数的本质:就是 多条代码放一起

数学中的函数

         数学中的定义:f(x)=x2 + 2x + 3

         Y = f(x)= 32 + 2*3 + 3=18

F(3):将3

带入到函数f中

X:自变量

Y:因变量

定义和调用

function 函数名(参数1,参数2){

         函数体

}

要求:

(1)       function定义函数的关键字必须写

(2)       函数名 给函数取名字要求和变量的命名规则是一样的

见名思意,小驼峰isSXH

(3)       参数1,参数2:形参是否需要根据需求来定

调用

         通过函数名进行调用,就是数学中的代入

         调用函数传递参数:实参

         函数名(1,2)

         IsSHX(10)

函数的组成

(1)       函数名

(2)       参数

(3)       函数体:这个函数的功能,一般是有返回值,返回值就是结果

案例:判断一个数是否为素数

(1)       函数名:isPrime

(2)       参数:带判定的数字

(3)       函数体:对这个数字进行判断,返回值是布尔类型:true/false

 

 

 

案例:找出两个数中较大的数字

(1)       函数名:max

(2)       参数:两个数 m n

(3)       函数体:通过比较找出较大的数,返回较大的数

 

 

 

案例:找出100以内所有的素数

(1)       函数名:isPrime

(2)       参数:带判定的数字

(3)       函数体:对这个数字进行判断,返回值是布尔类型:true/false

 

 

案例:验证哥德巴赫思想

任意一个偶数都可以拆成两个素数去校验10000以内的偶数

10000以内的偶数可以拆,我们认为他的猜想是成立的

如果10000以内的偶数不能拆分,他的猜想不成立

 

 

变量的作用域

定义一个变量在哪里有效

局部变量

函数内部定义的变量,出了这个函数这个变量就无效了,只能在函数内部使用

比如:三国时期,袁术称帝之后,只有他自己的阵营承认他是皇帝,他发布的吗,命令只有自己的阵容才听,其他人根本不承认他这个皇帝,他发布的命令也不听。

 

 

全局变量

在函数外部定义的变量,这个变量在任何地方都可以使用

比如:汉朝皇帝发布发布的命令不管是谁都要听这个命令

 

 

作用域冲突

定义一个全局变量的a,同时函数内部也有一个变量a,在使用的过程中到底使用哪个???

总行的行长到杭州分行来开会,杭州分行的行长也姓李。小王进来汇报工作:李行长,这个是我的工作汇报。这个李行长是谁?分行的...

冲突处理:就近原则

 

 

局部变量想让外部访问怎么做?

 

 

总结:变量的作用域只需要了解,知道怎么用就可以了,在企业中去避免这个问题,可以使用不同的变量名称规范这个问题,避免使用相同的问题

         考试、面试、面试官喜欢问这类问题

参数的传递

将实参传递给行参

 

 

A=888 是实参 x是形参 x变化了 原有的a的值没有任何变化,这种方式 值传递

a和x没有任何关系

         你给你给你对象一百块钱,她花了就是花了和你没有任何关系

引用传递

 

 

x.age 的值变了,obj.age的值也跟着变化了,传递的值是一个对象的时候,本质传递的引

用,x是obj的别名,本质是同一个东西。

你给对象100块钱,给的银行卡,你对象花钱了,反馈到你的卡上。

总结:

         常规类型传递参数是传值的方式:number string Boolean

         对象类型传递参数是引用的方式:object

如果一个函数想返回多个数据的时候,可以使用引用的方式来完成。

数组

数组的定义与元素的访问

怎么用??

定义有三种方式

(1)       Var a = [];

(2)       Var a = new Array();

(3)       Var a = [0,1,2];

访问元素:数组名+下标

a[0]  a[1]

需要注意的是下标是从零开始的

所以说在使用的时候要注意一下越界的问题,比如说你有一个5个元素的数组,那么他的下表的范围【0~4】不包括5,5已经越界了

数组的本质:

         一组变量的结合,或者是一组内存单元,只不过对于变量的表达方式是数组名+下表的方式

数组和循环的结合

数组属性:length

1)  :告诉我们数组长度:数组名.length

2)  :通过该属性可以改变数组长度

 

 

数组的常用方法

1)  unshift:在数组的头部添加元素,返回值返回的是新数组的长度

shift:删除数组头部元素,返回值是删除的元素

 

 

2)      indexOf:查找数组中重复出现元素第一次出现的位置,返回值是下标

         lastIndexOf:查找数组中重复出现元素最后一次出现的位置,返回值是下标

 

 

3)  push:在数组的尾部插入元素,返回值添加元素后数组的长度

pop:从数组尾部删除最后一个元素,返回值是删除的元素

 

 

4) slice(开始位置的下标,结束位置的下标);提取数组中指定连续的子数组,

包前,不包后

5)  splice(开始删除位置的下标,要删除元素的长度,选择插入或者替换的内容),splice有“剪接”的含义,前面两个参数定义“剪”的部分,第三个参数定义“接”的部分,经过不同参数组合就可以实现以下3个功能

1、删除操作:删除数组中指定的任意元素

2、插入操作:在数组中指定位置插入元素

3、替换操作:在数组中替换指定位置的元素

 

 

6)  concat 拼接

 

7)  sort 排序(默认是升序)

 

 

8)  join将数组转成字符串

 

 

 

9)  reverse将数组中的元素,反序输出。在原数组的基础上反序输出,不会重新创造新的数组(就是反着输出一遍)

 

 

字符串

定义:定义一个变量然后直接将字符串赋值给他

Var str = “abc123”

字符串实际上就是字符串组成的数组,所以说数组的方法他基本都有

(1)       访问字符串里面的字符

A:数组方式     str[1]

B:字符串特有的方式     charAt(1)

 

 

(2)       查找

A:数组方法  indexOf

B:字符串方法 search()方法,传入参数(要搜索的字符串)返回第一次出现位置的下标。这个方法对大小写比较敏感

Search()方法的功能比indexOf强大,它能够使用正则表达式来查找

 

 

(3)       取字符串

A:数组方法 slice()

B:字符串特有方式

subst(star,length)传入参数(第一参数,开始截取的下表,如果没有第二个参数,它就一直取到最后)(第二个参数,截取长度)

 

 

 Substring(start.end)传入两个参数,第一个参数,开始截取的下标。第二个参数,截取结束的下标。包前不包后。

 

 

(4)       替换

数组方式:splice

字符串的方式:replace()替换,传入的参数(第一个参数被替换的字符,第二个参数新的字符

 

 

(5)       toUpperCase():将小写字母转化为大写字母

 

 

                   toLowerCase():将大写转化为小写

 

 

                   trim():去除字符串首尾的空格

 

 

         Split(x):字符串的分割,用字符串x分割,分割前是字符串,分割之后是一个数组

         数组里面有一个toString,将数组转成字符串,元素之间逗号隔开

 

 

事件

事件的概念

事件源

事件名

事件注册

事件处理

以火灾为例:

         Xx大酒店201房间,发生火灾,119电话报警,南湖区消防支队出警,赶往现场喷水作业成功灭火

事件源:Xx大酒店201房间

事件名:火灾

事件注册:实现已经规划好片区,xx大酒店所属盘曲归属南湖消防值对负责

事件处理:喷水

常用的事件

鼠标常用事件

(1)       单击事件

 

 

事件源:id为p1的元素

事件名:单击

事件注册:onclick=“fun()”,也就是说当单击id为p1的时候,就交给fun函数来处理

事件处理:

(2)       双击事件

 

 

(3)       鼠标按下/弹起(onmousedown/ onmouseup)

 

 

(4)       鼠标的移入/离开(onmouseenter/onmouseleave)

 

 

Onmouseover/onmouseout与onmouseenter/onmouseleave很类似后面讲

(5)       鼠标移动 onmousemove

通过鼠标移动获取坐标

 

 

(6)       鼠标滚轮onmousewheel

 

 

键盘事件

(1)       keypress

 

 

Keycode属性记录了按下键的键码

Keypress事件只能捕获可打印的字符的按键,不能捕获shift ctrl alt等等不可以打印字符的按键

但是可以使用shiftkey ctrlkey等属性判断在按键的同时是否按下了shift ctrl等辅助键

(2)       keydown keyup

 

 

keydown keyup·可以捕获键盘上所有的键个别除外

 

 

(1)       使用变量top会导致上下移动失败,原因是window.top这个全局变量冲突,换个函数名就好了

(2)       把变量top1和 left 移入函数中,发现只能移动5px,函数内部局部变量再每次调用函数时都会重新创建并初始化,也就是说每一次调用left和top1值都为0不会保留上一次的值。想保留,就只能使用全局变量。

其他事件

Onfocus获得焦点的事件

Onblur失去焦点的事件

Ongchange值改变事件

 

 

事件的注册

三种方法

(1)       使用onxxx属性,比如onclick = “fun()”

(2)       通过js去设置元素的onxxx属性

(3)       通过addEventListener注册

 

 

后两种办法可以将页面的内容样式和行为分离,分离之后方便分工合作

第三种方法,addEventListener第一个参数事件名,第二个参数是事件处理函数添加事件监听也可以移除,用的addEventListener。

捕获与冒泡

 

 

你点击文字,先提示“段落被单击”,然后再提示“div被单击”。因为div是段落的父容器,所以单击了段落也就单击了 div,两个都会触发这个事件。

如何规定两个触发的顺序,事件的冒泡和捕获

冒泡:按照从内到外依次触发,默认

捕获:反之

 

 

当你使用onmouseenter事件时,里层div触发进入事件,处理完了就完事了(阻断冒泡)而你使用onmouseover事件时,里层div触发进入事件,处理完了还会冒泡父容器进入事件

         自己去阻止冒泡stopPropagation();

DOM

DOM概念

DOM:document object model:文档对象模型

通过js去操作html代码,添加元素,删除元素······

获取元素

(1)       getElementById通过id获取,获取到的是一个元素

(2)       getElementsByTagName 通过标签名获取,获取到的是一个元素集合(数组)

(3)       getElementsByClassName 通过class获取,获取到的是一个元素集合(数组)

(4)       getElementsByName 通过name获取,获取到的是一个元素集合(数组)

总结:获取元素可以根据标签名、id、class、name属性来获取。ld获取的结果是一

个元素,而其他获取的是一个集合。

Document对象支持以上四种,而element对象仅支持

getElementsByTagName和getElementsByClassName

修改元素

(1)       修改内容

同过innerText属性读取或设置标签内部的文件

可以用innerHTML属性读取或设置标签内部的文件

两个区别:innerHTML会对HTML语言解析

                     innerText只是改变文本内容

 

 

 

(2)       修改样式

A:xxx.style.yyy

B:xxx.calssname = “………”(相当于修改了class属性)

 

 

添加删除元素

动态添加

(1)       createElement创建一个元素节点

createElement(”p”)创建一个段落

(2)       createTextNode创建一个文本节点

createTextNode(”文本内容”)创建一个值为”文本内容”的文本节点

(3)       appendChild添加子节点

(4)       removeChild删除子节点 

 

 

动态删除

 

 

导航

document根节点

parentNode获取父节点

childNodes获取所有的子节点

firsChild第一个子节点

lastChild最后一个子节点

 

 

BOM

概念:browser object model(浏览器去项目模型)

常用对象

Window窗口 浏览器窗口

我们定义的全局变量都是window对象的属性和方法

 

 

窗口body的宽度:window.innerWidth

窗口body的高度:window.innerHeight

常用的方法

         Window.onload:窗口加载事件

 

 

 

 

 

 

Open:打开一个新的窗口。三个参数,第一个参数(打开窗口的路经),第二个参数(打开窗口的方式),第三个参数(对新打开窗口的描述,宽高等·····)

Close:关闭一个窗口

Moveto:移动一个窗口,以窗口的左上角坐标为起点

Focus:视窗口获得焦点

Resizeto:改变窗口的大小

 

 

Screen:屏幕,也是window下面的一个对象,在使用的时候可以用window.screen也可以把window去掉

屏幕常用的属性:宽和高(可用的高和宽不包括任务栏)

 

 

Location地址

http://127.0.0.1:8848/wed13js/6.html

协议://主机:端口/路径

 

 

历史记录

hstory:历史记录

记录当前窗口的历史,可以进行页面的一个转换

Back:返回上一页

frward:进入下一页

Go:确认进入到那一页(go的值为-1回到上一页)

 

 

案例

弹窗

Alert()警告提示框,也是window对象下的方法,window可以不写

Prompt(” 提示信息”,”默认值”)信息提示输入框。当点击确认后才把值返回,否则返回的是空

Confirm(“提示的信息“):确认框。点击确认返回true,顶级取消返回false

 

 

计时事件

Setinterval(“函数“,”毫秒数“);//计时器,每隔多长时间调用一次函数

Clearinterval(计时器);//停止一个计时器

 

 

setTimeout(“函数名“,”毫秒数“);//延时器,就是隔了多久之后调用一次函数

 

posted @ 2021-02-05 13:55  小闫爱前端  阅读(161)  评论(0)    收藏  举报