# JavaScript **Repository Path**: x__zhang/JavaScript ## Basic Information - **Project Name**: JavaScript - **Description**: 大神在修炼--JavaScript - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 20 - **Created**: 2021-11-16 - **Last Updated**: 2022-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaScript ## 基础简介 > 1.了解js基础概念 > > 2.掌握js的三种引入方式 > > 3.了解js三种数据输出方式 ### js基本概念 JavaScript是一种基于**对象**(Object)和**事件驱动**(Event Driven)的**脚本**语言。 JavaScript的特点是:`基于对象`和`事件驱动`,`动态型`的`解释型`语言 ### js引入方式 - 内部方式:写在script标签中 ```html ``` - 外部方式:在script标签中使用src引入 ```html ``` - 写在标签中的事件属性中 ```html
点我
``` ### js输出数据 通过JavaScript将数据输出显示在浏览器中的方式有多重,我们学习常用的三种方式 - 调用浏览器弹出框显示数据 ```javascript alert("hello world") ``` - 输出数据到浏览器控制台 ```javascript console.log("hello world") ``` - 将数据输出到页面中 ```javascript document.write("

hello world

") ``` ### 1.1输出欢迎信息 ## 数据类型 > 1.了解js中的数据类型 > > 2.掌握基础数据类型的5种形式 > > 3.了解不同的数字表示方式及不同的进制的数字表示方式 > > 4.了解字符串类型中转义字符的使用 ### 数据类型概述 程序的运行就是对数据的处理,JavaScript中可以处理的数据分为`对象类型(引用类型)`和`原始类型(基础类型)`。 原始数据类型包含5中数据类型:数字类型Number、字符串类型String、布尔类型Boolean、null类型、undefined类型。 ### 数字类型Number - 数字表示方式 js中可以使用多种数字表示方式:十进制数字、八进制数字、十六进制数字、浮点数 ```javascript // 不同进制的数字表示方式 console.log(10); // 十进制数字10 console.log(0x10); // 十六进制数字10 == 16 console.log(010); // 八进制数字10 == 8 // 浮点型的数字表示方式 console.log(3.14); // 3.14 console.log(3.14e5); // 3.14*10^5 ==314000 console.log(3.14e-5); // 3.14/10^5 ==0.000314 ``` - 补充 > js中对于小数的计算存在误差,实际编程时要注意。 ### 字符串类型String - 字符串 从语法上来说,用双引号`""`或者单引号`''`,包含的内容就是一个字符串。 字符串是一组字符组成的文本。 ```javascript console.log("hello world") // console.log('hello world') // console.log("214") //这个写法就是字符串214 ``` - 转义字符 在字符串中使用反斜杠有特殊用途,反斜杠后边加上一个字符就不再表示这个字符原始含义,比如`\n`就代表换行。`\'`、`\"`会让引号失去表示字符串的作用。 ```javascript console.log("我是一个超级英雄") console.log("我是一个\n超级英雄") //使用\n表示换行 //console.log("我是一个"超级英雄"") //报错 console.log("我是一个\"超级英雄\"") //使用\" 让双引号失去组成字符串的作用 ``` | 转义字符 | 作用 | | -------- | --------------------- | | `\n` | 换行符==enter | | `\t` | 制表符==tab | | `\r` | 回车符==enter(失效) | | `\"` | 双引号字符 | | `\'` | 单引号字符 | | `\\` | 反斜杠字符 | ### 布尔值Boolean 布尔值用来在js中表示真假。这个类型只有两个值`true`、`false`。 - 布尔值一般都是在条件语句中作为判断的条件来使用。 ```javascript if(true){ console.log("条件是真,代码执行") } if(false){ console.log("条件是假,代码不会执行") } ``` - js中一些运算的结果用布尔值表示,如比较运算。 ```javascript console.log(1>2) //false console.log(1==2) //false console.log(1<2) //true ``` ### null与undefined - null类型只有一个值null,表示空(没有) - undefined类型只有一个值undefined,表示空(没有) 我们暂时不讨论null和undefined的使用,在以后的学习中会逐渐了解他们的具体使用场景。 ### 获取数据类型 js中使用typeof可以获取数据的类型。获取的结果是字符串形式。 ```javascript console.log(typeof 123) // "number" console.log(typeof "123") //"string" console.log(typeof true) //boolean console.log(typeof null) ////"object" console.log(typeof undefined) //"undefined" ``` - 测试 ```javascript console.log(typeof typeof 123) //????? ``` ## 变量 > 1.了解什么是变量 > > 2.掌握变量的使用方式 #### 什么是变量 - 变量是js中存储数据的标识符,用来表示计算机的内存地址。通过变量可以方便的使用数据。 - 变量用来存储数据 #### 变量的使用 变量的使用可以分为:声明、赋值、调用三种方式 - 变量的声明 ```javascript /* 变量的命名规则: 可以包含数字、字母、下划线_ 、$ 不能以数字开头 不能使用关键字及保留字 js中已经有特殊作用的词 区分大小写 */ var a; var b; ``` - 变量的赋值 ```javascript var a; var b; a=10; b=20; ``` - 声明及赋值的灵活使用 ```javascript // 同时声明和赋值 var c = 30; // 同时声明多个变量 var d,e,f; d=10; e=20; f=30; // 同时声明多个变量并赋值 var g=10,h,i=20; ``` - 变量的调用 ```javascript // 变量的调用 console.log(a) console.log(a+b) // 变量的重新赋值 console.log(c) c = "c的新值" console.log(c) ``` #### 练习: - 交换两个变量的值 ```javascript // 声明变量aa bb var aa = 10; var bb = 20; // 编写代码 实现将aa bb变量中的值互换 ``` - 下面哪些变量是合法的 ```tex a 1 age18 18age name $name _sex &sex theworld theWorld ``` - 完成功能要求 ```tex 定义一个变量存储自己的名字 定义一个变量存储自己的年龄 在浏览器中输出: 我是xxx,我今年xxx岁了。我是一名"高级"端工程师。 ``` - 扩展prompt()实现上边的案例 ## 关键字与保留字 关键字和保留字是js中已有特殊作用或者可能有特殊作用的字,我们不能用他们作为变量名。 ``` html 关键字:是指 JS本身已经使用了的字,不能再用它们充当变量名、方法名。 包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with 等。 ``` ```html 保留字:实际上就是预留的“关键字”,意思是现在虽然还不是关键字,但是未来可能会成为关键字,同样不能使用它们当变量名或方法名。 包括:boolean、byte、char、class、const、debugger、double、enum、export、extends、fimal、float、goto、implements、import、int、interface、long、mative、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile 等。 ``` ### 1.2使用变量存储用户信息并输出 ## 数据类型转换 > 1.掌握字符串转数字的两个方法 > > 2.掌握强制类型转换的方法 > > 3.了解toString()的使用 > > 4.了解特殊场景下数字转换的字符串的操作 js中数据的使用非常灵活,在实际开发时根据需要,可以更改数据的类型。 #### 字符串转数字 - parseInt() `parseInt(string, radix);` - parseInt()可将字符串转化成整数数字 - 纯数字字符串可以转化为数字 - 以数字开头的字符串,可以截取整数部分 - 其他情况结果都是NaN ```javascript "123" "123hello" "12.5" "hello2020" "12.3hello" ``` - parseFloat() `parseFloat(string)` - parseFloat()可将字符串转化成浮点型数字 - 纯数字字符串可以转化为数字(可以保留小数) - 以数字开头的字符串,可以截取数值部分(可以保留小数) - 其他情况结果都是NaN ```javascript "123" "123hello" "12.5" "hello2020" "12.3hello" ``` ##### 练习 > 1.使用prompt完成类型转换案例。 > > ​ 页面打开,弹出输入框 > > ​ 输入数据 > > ​ 输入数据之后,提示:“你输入的原始数据是xxx,转换为数字是xxx” > #### 强制转换 除了parseInt和parseFloat可以将字符串转换为数字,js还提供了其他的方法实现数据类型的转换。 - Number() - 将其他类型的数据转换为数字类型 - 字符串:只有纯数字字符串可以转换为数字,其他字符串得到NaN - 布尔值:true==1 false==0 - null==0 - undefined==NaN - String() - 将其他类型的数组转换为字符串 - Boolean() - 将其他类型的数据转换为布尔值 - 只有五个数据可以转换为false:数字`0`、空字符串`""`、`null`、`undefined`、NaN - 其他都是true #### toString() - 所有的数据都可以调用toString(),进行字符串类型的转换。 - 数字在调用toString()时,可以添加一个2~36的参数,在转换字符串时可以实现进制转换 ``` //声明变量a 赋值为15 var a = 15; //将数字15转换为字符串并进行进制转换 console.log(a.toString(2)) //1111 console.log(a.toString(16)) //f console.log(a.toString(8)) //17 ``` #### 特殊数字转字符串 (1)toFixed方法根据小数点后的指定位数将数字转换为字符串,他从不使用指数记数法;`四舍五入` (2)toExponential方法使用指数记数法将数字转换为指数形式的字符串,其中小数点前只有一位,小数点后的位数则由参数指定(也就是说有效数字位数比指定的位数要多一位); (3)toPrecision方法根据指定的有效数字位数将数字转换成字符串。如果有效数字的位数少于数字整数部分的位数,则转换成指数形式。 ```javascript var n=123456.789; n.toFixed(0); //返回字符串"123457" n.toFixed(2); //返回字符串"123456.79" n.toFixed(5); //返回字符串"123456.78900" n.toExponential(1); //返回字符串"1.2e+5" n.toExponential(3); //返回字符串"1.235e+5" n.toPrecision(4); //返回字符串"1.235e+5" n.toPrecision(7); //返回字符串"123456.8" n.toPrecision(10); //返回字符串"123456.7890" ``` ### 1.3 制作进制转换小工具 ## DOM概述 > 1.了解js的组成 > > 2.了解DOM的基本概念 > > 3.掌握获取标签的四种方式 > > 4.了解js中body、html、window的特殊使用 ### js语法组成 js的语法由三部分构成:ECMAScript、DOM、BOM。 - ECMAScript:规定了JS的编程语法和基础核心知识,是所有浏览器厂商共同遵守的一套JS语法工业标准。(变量、数据类型、运算符....) - DOM:**文档对象模型(DocumentObject Model,简称DOM)**,是W3C组织推荐的处理可扩展标记语言的标准编程接口。通过 DOM 提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等) - BOM:浏览器对象模型**(Browser Object Model,简称BOM) 是指浏览器对象模型,它提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等。 ### DOM概述 根据DOM规定,HTML文档中每个成分都是一个节点。 - 整个文档是文档节点 - 每个HTML标签是一个元素节点 - 包含在标签HTML中的元素是文本节点 - 每一个HTML属性是一个属性节点 - 注释属于文本节点 节点之间的关系如下图所示:DOM树结构 ### 获取元素 DOM中定义了许多方式来选取元素、查询文档的一个或多个元素,以下是几种常用方式: - 使用id获取元素 `document.getElementById("yuanyuan")` - 使用类名class获取元素`document.getElementsByClassName("yuanyuan")[0]` - 使用标签名称获取元素`document.getElementsByTagName("div")[0]` - 使用name属性获取元素`document.getElementsByName("yuanyuan")[0]` ### body-html-window - js中可以不用获取body和html直接使用。 ```javascript // 页面中的body标签 document.body // 页面中的html标签 document.documentElement ``` - window是浏览器的顶级对象,当要给整个页面添加事件时使用window。 ```javascript window.onclick = function(){ alert("页面中发生了点击事件") } ``` ## DOM事件 > 了解事件 > > 掌握事件三要素及事件的基本操作 DOM中的事件是指在HTML标签上发生的各种事情,我们可以在发生事件时实现一些效果。 事件操作有三个要素:事件源、事件类型、事件处理程序。 案例: - 点击按钮弹出提示框 ## DOM操作 > 1.掌握标签内容的获取及设置 > > 2.掌握标签属性的获取及设置 > > 3.掌握标签样式的获取及设置 ### 标签内容 操作元素的内容的方式有两种:innerHTML、innerText。 - innerTHML:获取或设置元素的所有的HTML内容。(可以识别html结构) - innerText:获取或设置元素的纯文本。(不识别html结构) 案例: - 点击按钮获取标签内容,点击按钮修改标签内容 ### 标签属性 js中的属性操作分为两种方式 - 第一种是直接操作html标准属性,比如:id,id,src,href,title...,这些标签的原有属性 - 使用getAttribute(),setAttribute()操作任意的元素属性。 ```javascript // 获取div的id值,并输出 console.log(div.id) // 修改新的id值 div.id = "new" // 获取div的id值,并输出 console.log(div.getAttribute("id")) // 修改新的id值 div.setAttribute("id","news") ``` 案例: - 点击按钮,修改图片 - 仿京东显示隐藏密码D ### 标签样式 js可以直接操作元素的样式。 ```javascript // 获取标签的样式 width ,并输出 console.log(div.style.width) // 设置标签的样式 width=300px div.style.width="300px" ``` 案例: - 关闭淘宝二维码案例D - 开关灯效果D ### 2.1创建新闻列表 ## DOM事件详情 > 1、掌握事件对象的使用 > > 2、了解常见的鼠标事件 > > 3、了解常见的键盘事件 > > 4、了解常见的表单事件 > > 5、了解页面加载事件 ### 事件对象 事件发生后,跟事件相关的一系列信息数据的集合都放到一个对象数据中,这个对象数据就是事件对象。 比如: - 发生事件的标签 `e.target` - 鼠标事件发生的位置 `e.pageX` `e.pageY` - 键盘事件点击的标签 `e.keyCode` 在绑定事件处理函数时,放入一个参数。事件函数执行时,这个参数就用来接收事件对象,通过这个参数就可以调用事件对象中的数据。 ```javascript div.onclick = function(e){ //输出事件对象 console.log(e) //输出事件对象中存储的 事件源标签 console.log(e.target) } ``` 案例: - 鼠标点哪,仙女飞到哪 ### 鼠标事件 | **属 性** | **描 述** | | ------------ | -------------------------------------- | | onclick | 当用户单击某个对象时会触发的事件 | | ondblclick | 当用户双击某个对象时会触发的事件 | | onmousedown | 鼠标按钮在某个元素上被按下时触发的事件 | | onmouseenter | 当鼠标指针移动到元素上时触发的事件 | | onmouseleave | 当鼠标指针移出元素时触发的事件 | | onmousemove | 当鼠标在元素上移动时触发的事件 | | onmouseover | 当鼠标移到某元素之上时触发的事件 | | onmouseout | 当鼠标从某元素中移开时触发的事件 | | onmouseup | 当鼠标键在某元素上被松开时触发的事件 | 案例: - 鼠标移入移出事件 - 仙女跟着鼠标飞D ### 键盘事件 | **属 性** | **描 述** | | ---------- | ------------------------------ | | onkeydown | 某个键盘按键被按下时触发 | | onkeyup | 某个键盘按键被松开时触发 | | onkeypress | 某个键盘按键被按下并松开时触发 | - 基本案例 ### 表单事件 | **属 性** | **描 述** | | ---------- | ------------------------ | | onblur | 元素失去焦点时触发 | | onfocus | 元素获取焦点时触发 | | onchange | 表单元素的内容改变时触发 | | oninput | 元素获取用户输入时触发 | | onsubmit | 表单提交时触发 | 案例: - 显示隐藏文本框内容——焦点事件属性操作D ### 加载事件 以上学习的事件都是对应用户操作,而有些事件不用用户操作也会自动发生。如:在页面加载完成之后,就会自动发生onload事件。 ```javascript window.onload = function(){ alert("页面加载完成后,自动发生了onload事件") } ``` ### 2.2计算商品总价 ## 函数基础 > 1.了解函数的概念及作用 > > 2.掌握函数的定义与调用 > > 3.掌握函数的参数的使用 > > 4.掌握实参列表arguments的使用 > > 5.掌握函数返回值的使用 函数是一个代码结构,用来封装具有特定功能的代码,函数可以重复调用。 ### 函数的定义 > 函数是一种JavaScript代码结构,用来封装某些编程上的功能。函数在使用时只需要定义一次,但是可以被调用多次。 函数的声明有两种形式 - 标准的声明方式 ```javascript function a(){ //写代码 } ``` - 函数表达式 ```javascript var a = function(){ //写代码 } ``` ### 函数的调用 ```javascript function a(){ //写代码 } //调用函数 一定要有小括号 a() ``` ### 函数的参数 - 函数可以声明参数(形参) 使用形参写流程 - 形参默认值是undefined - 调用的时候,要传入实参 ```javascript // 使用形参,设计代码流程 var a = function(num1,num2){ console.log(num1 + num2) } // 传入实参 实参与形参 是按照顺序一对一 a(100,200) ``` #### 练习 - 求1-n之间所有数的和 - 求n-m之间所有数额和 - 圆的面积 - 求2个数中的最大值 - 求3个数中的最大值 ### arguments 当函数中使用参数较多时,或者程序需要的参数个数不确定。使用`形参+实参`的方式就很难实现。 函数中有一个关键字`arguments`,用来接收所有的实参。 ```javascript // 设计一个函数用来实现计算任意个数数字的和 function sum(){ //演示arguments的使用 //console.log(arguments) var total = 0; for(var i in arguments){ sum += arguments[i] } console.log(sum) } sum(1,2,3,4,5) ``` - arguments 是已数组的形式,接收所有的实参。循环数组就可以得到每一个实参。 #### 练习 - 使用函数,输出任意个数数字的最大值 - 使用函数,输出任意范围内和7相关的数字 ### 函数的返回值 > 函数执行时,除了会把函数中的代码执行一遍,还会得到一个结果。 ```javascript // 定义一个函数 var fun = function(){ var a = 1; var b = 2; var c = a +b; console.log(c) return "我是返回值" // 执行函数,将函数的结果赋值给变量 var res = fun() // 输出函数执行之后的结果 console.log(res) ``` > - 函数执行默认的结果是:undefined > - 函数中使用 return 关键字设置函数的返回值 这个返回值就是函数执行之后的结果。 > - return 除了可以设置函数返回值,还会结束函数执行,所有return只能放最后。 #### 练习 - 使用函数,获得一个数组中的最大值 ### 5.1 彩票中奖 ## 函数补充 > 1.了解作用域及作用域链 > > 2.了解常用的系统函数 > > 3.了解匿名函数 > > 4.了解自执行函数 > ### 变量作用域 在JavaScript中,变量的作用域是定义这个变量的区域,变量分为两类: - 局部变量:在函数中声明的变量,就是局部变量,只能在定义的函数使用。 - 全局变量:没有在函数中定义的变量就是全局变量,全局变量可以在任意位置使用。 > 只有函数可以限定作用域 (ES5) > > 变量未声明直接赋值,默认为全局变量 ```javascript var a = "全局变量" function test(){ var b = "局部变量" console.log(a) // "全局变量" console.log(b) // "局部变量" } console.log(a) // "全局变量" console.log(b) // 报错,因为局部变量只能在函数中使用 ``` ### 作用域链 在嵌套的函数结构中,内层函数在使用变量时,优先使用自己内部的变量,自己没有就会逐层向外查找。 ```javascript // 练习 function f1() { var num = 123; function f2() { console.log( num ); } f2(); } var num = 456; f1(); ``` ### 常用系统函数 escape() 函数可对字符串进行编码,将字符转换成ASCII码值。 - 字母、数字不会被转码 - `* @ - _ + . / 。`这些符号也不会转码 unescape() 对 escape() 编码的字符串进行解码 ```javasc var str = "*那个叫孙晨的老师很nice" // 对字符串进行编码 var str1 = escape(str); // 解码 var str2 = unescape(str1) console.log(str1) // *%u90A3%u4E2A%u53EB%u5B59%u6668%u7684%u8001%u5E08%u5F88nice console.log(str2) // *那个叫孙晨的老师很nice ``` eval() 函数可解析字符串,并执行其中的的 JavaScript 代码。 ```javascript // 执行字符串中的代码 eval("console.log(123)") ``` ### 匿名函数 - 没有名字的函数,就是匿名函数。我们在使用函数表达式时,使用的就是匿名函数。 ```javascript var a = function(){} // 使用变量的名称作用函数的名称使用 ``` - 函数表达式中函数原有的名字会被忽略,只能使用变量作为函数名调用函数。 ```javascript var a = function test(){ console.log(1) } // test() //报错 a() //执行 ``` ### 自执行函数 我们正常使用函数都是先声明,再调用。有时候我们也会用到在声明时直接就调用函数,这时就需要使用自执行函数。 ```javascript // 自执行函数的语法 (function(){ console.log(1) }()) ``` - 自执行函数使用匿名函数 - 自执行函数的名称也会被系统自动忽略 ```javascript (function test(){ console.log(1) }()) test() //报错 ``` ## 预解析 > 1.了解js执行时的预解析 JavaScript的代码在正式执行之前,会先进行预解析,按照一定的规则调整代码的顺序。然后再逐行执行代码。 预解析的规则如下: - 1函数声明整体提升 - 2变量声明提升 - 3.(函数中)将实参赋值给形参 > 练习1 ```javascript var a = 25; function abc (){ alert(a); var a = 10; } abc(); console.log(a); function a() { console.log('aaaaa'); } var a = 1; console.log(a); ``` > 练习2 ```javascript var num = 10; fun(); function fun() { console.log(num); var num = 20; } ``` > 练习3 ```javascript var a = 18; f1(); function f1() { var b = 9; console.log(a); console.log(b); var a = '123'; } ``` > 练习4 ```javascript f1(); console.log(c); console.log(b); console.log(a); function f1() { var a = b = c = 9; console.log(a); console.log(b); console.log(c); } ``` ### 5.2 计算器 ## BOM-window对象 > 1.了解BOM与window对象 > > 2.掌握window对象的常用属性 > > 3.掌握window对象的事件处理 > > 4.掌握window对象的常用方法 > > 5.掌握window对象的子对象:document、location、screen、history ### BOM与window对象 在DOM章节,已经给大家讲解过javascript代码可以分为三大组成部分。 BOM(Browser Object Model,浏览器对象模型)是JavaScript向程序员提供的一种操作Web浏览器的手段。 - 页面的打开、刷新、关闭 - 浏览器历史记录操作 - 浏览器地址栏操作 - 割了... BOM以Window对象为依托,Window对象是一个全局对象、是所有对象的顶级对象,在JavaScript中有着举足轻重的作用。 window对象还是JavaScript的全局对象,因此所有的全局变量和函数都可以看成是Window对象的属性和方法。window调用属性时,window一般省略不写。 同时,Window对象作为对象的一种,也有着自己的方法和属性。 ### window对象的常用属性 | **属 性** | **描 述** | | --------------- | ------------------------------------------------- | | closed | 返回窗口是否已被关闭 | | defaultStatus | 设置或返回窗口状态栏中的默认文本 | | **innerHeight** | 返回窗口的文档显示区的高度 | | **innerWidth** | 返回窗口的文档显示区的宽度 | | length | 设置或返回窗口中的框架数量 | | name | 设置或返回窗口的名称 | | opener | 返回对创建此窗口的窗口的引用 | | **outerHeight** | 返回窗口的外部高度 window.innerHeight | | **outerWidth** | 返回窗口的外部宽度 | | pageXOffset | 设置或返回当前页面相对于窗口显示区左上角的 X 位置 | | pageYOffset | 设置或返回当前页面相对于窗口显示区左上角的 Y 位置 | | parent | 返回父窗口 | | self | 返回对当前窗口的引用。等价于 Window 属性 | | status | 设置窗口状态栏的文本 | ```html

``` ### window对象的事件处理 window对象作为整个浏览器的最顶层对象,支持页面中的所有事件。 页面的整体事件,如页面加载,页面大小改变,页面滚动条滚动等等这些事件就添加给window。 | onload | 页面文档加载完毕后触发 | | -------------- | ------------------------------------------------------------ | | onresize | 对象尺寸发生改变时触发 | | onscoll | 对象滚动条被卷动时触发 | | onerror | 窗口中的脚本发生错误时被激发 | | onunload | web页面被卸载时触发(窗口关闭或转到其他页面)只有高版本IE | | onbeforeunload | web页面被卸载前出发(窗口关闭或转到其他页面) 大部分浏览器能用 | ```javascript // window支持所有的标签事件 window.onclick = function(){ console.log("鼠标点击") } // 整个页面的事件 使用window处理 // onload 页面加载之后 window.onload = function(){ console.log("页面打开之后,就会触发onload事件。") } // 页面大小改变 window.onresize = function(){ alert("页面大小改变,触发onresize事件") } // 页面关闭事件:关闭页面、刷新页面、跳转新页面 (理想很丰满,现实很骨感===这个事件几乎不管用) window.onunload = function(){ alert("还有大奖没领,确定要退出吗") return false; } // 页面被关闭前触发:关闭页面、刷新页面、跳转新页面 window.onbeforeunload = function(){ alert("确定要退出吗") return "确定要退出吗"; } ``` ### window对象的常用方法 window对象中有一系列的方法用来控制窗口的行为: | 方法 | 作用 | | ---------------- | ------------------------------------------------------------ | | alert( ) | 显示带有一段消息和一个确认按钮的警告框 | | prompt( ) | 显示可提示用户输入的对话框 | | confirm() | 显示带有一段消息以及确认按钮和取消按钮的对话框 | | open() | 打开一个新的浏览器窗口或查找一个已命名的窗口 | | close() | 关闭浏览器窗口 | | moveBy() | 可相对窗口的当前坐标把它移动指定的像素 | | moveTo() | 把窗口的左上角移动到一个指定的坐标 | | resizeBy( ) | 以窗口的原始大小为基准,横向扩大或缩小指定像素,纵向扩大或缩小指定像素 | | resizeTo( ) | 把窗口的大小调整到指定的宽度和高度 | | scrollBy( ) | 按照指定的像素值来滚动内容 | | scrollTo( ) | 把内容滚动到指定的坐标 | | clearInterval( ) | 取消由 setInterval( )方法设置的timeout | | clearTimeout() | 取消由 setTimeout() 方法设置的timeout | | setInterval( ) | 按照指定的周期(以毫秒计)来调用函数或计算表达式 | | setTimeout( ) | 在指定的毫秒数后调用函数或计算表达式 | - 三个弹框的使用 ```javascript
``` - 页面的打开、关闭、大小设置、位置设置 ```html ``` **打开新页面时,可以设置的特征有:** | 属性 | 作用 | | ------------------------- | ------------------------------------------------------------ | | channelmode=yes\|no\|1\|0 | 是否要在影院模式显示 window。默认是没有的。仅限IE浏览器 | | directories=yes\|no\|1\|0 | 是否添加目录按钮。默认是肯定的。仅限IE浏览器 | | fullscreen=yes\|no\|1\|0 | 浏览器是否显示全屏模式。默认是没有的。在全屏模式下的 window,还必须在影院模式。仅限IE浏览器 | | height=pixels | 窗口的高度。最小.值为100 | | left=pixels | 该窗口的左侧位置 | | location=yes\|no\|1\|0 | 是否显示地址字段.默认值是yes | | menubar=yes\|no\|1\|0 | 是否显示菜单栏.默认值是yes | | resizable=yes\|no\|1\|0 | 是否可调整窗口大小.默认值是yes | | scrollbars=yes\|no\|1\|0 | 是否显示滚动条.默认值是yes | | status=yes\|no\|1\|0 | 是否要添加一个状态栏.默认值是yes | | titlebar=yes\|no\|1\|0 | 是否显示标题栏.被忽略,除非调用HTML应用程序或一个值得信赖的对话框.默认值是yes | | toolbar=yes\|no\|1\|0 | 是否显示浏览器工具栏.默认值是yes | | top=pixels | 窗口顶部的位置.仅限IE浏览器 | | width=pixels | 窗口的宽度.最小.值为100 | - 定时器的使用:延时定时器 ```javascript ``` - 定时器的使用:循环定时器 ```javascript ``` ## window对象的子对象 > 1. 掌握document对象的部分属性及方法 > 2. 掌握screen对象的部分属性及方法 > 3. 掌握history对象的部分属性及方法 > 4. 掌握location对象的部分属性及方法 window对象时JavaScript的全局对象,也是浏览器中所有对象的顶层对象。 ### document对象 document是window的直接子对象,document中的属性和方法是用来直接操作页面的,也就是我们所说的DOM操作 除了之前讲过的DOM操作,document还有一些其他属性。 ```javascript 1
``` ### screen对象 screen对象用来描述显示器信息,宽高、分辨率。这个都是只读的,只能获取不能设置 ```javascript ``` ### history对象 history对象也称为历史记录对象,用来操作浏览器的历史记录。 ```javascript ``` ### location对象 - location对象,用来获取和修改页面的url。修改url,会是页面跳转或者是发送请求到服务器。 ```javascript ``` - location的常用方式,修改url跳转页面 ```javascript //常用方式:使用location对象 更改url,发送心得请求 location.href = "https://www.baidu.com";//跳转到新地址 location.assign("https://www.baidu.com");//跳转到新地址 location.replace("https://www.baidu.com");//跳转到新地址,不会产生新的历史记录 location.reload();//刷新当前页面 ``` ## AJAX > 1.了解ajax的作用及特点 > > 2.了解ajax请求对象 > > 3.掌握基本的ajax的程序 > > 4.掌握get请求方式的使用 > > 5.掌握post请求方式的使用 > > 6.掌握ajax中处理json数据 ### 请求概述 web的设计目的,就是将文件(数据)放在公共的服务器中,让所有网络中的用户,可以通过浏览器访问这些资源。 没有ajax之前,浏览器向服务器发起请求的方式有: - 在url地址栏输入 地址,回车,刷新 - 页面中具有`src`或`href`的标签。a、img、link、script... - 表单提交 ### ajax的作用及特点 > AJAX(Asynchronous JavaScript and XML),异步的JavaScript和XML。是一种用于创建快速动态网页 的技术。通过服务器进行数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载 整个网页页面。 > > 简单来说,ajax是一种实现前后端数据交互的方式,请求是异步的方式,并且可以在不刷新整个页面的情况下更新页面内容。 > > 使用ajax实现页面的更新一般需要同时使用JavaScript、css、DOM与XMLHttpRequest。 ### js中的异步与同步 js中的代码执行分为同步代码与异步代码,正常情况下js都是以同步方式执行。 - 同步:上一行代码执行完毕,才能读取并执行下一行代码。 - 异步:读完代码后,不用等到执行,就可以接着读取下一行代码。 - 定时器、ajax ```javascript console.log(1) console.log(2) console.log(3) //1 2 3 ``` ```javascript console.log(1) setTimeout(function(){ console.log(2) },2000) console.log(3) //1 3 2 ``` ### ajax请求对象 使用ajax发送请求的关键是使用内置的请求对象。 ```javascript //使用内置的构造函数,创建请求对象 var xhr = new XMLHttpRequest() ``` 如何开发时需要考虑IE5、IE76,在创建请求对象时,需要设计兼容代码。 ```javascript var xhr; //如果window.ActiveXObject 存在 运行环境就是低版本的IE浏览器 if(window.ActiveXObject) { //使用内置构造函数 创建请求对象 xhr = new ActiveXObject("Microsoft.XMLHTTP"); } else { // 不存在 运行环境就不是低版本的IE浏览器 //使用内置构造函数 创建请求对象 xhr=new XMLHttpRequest(); } ``` - 请求对象的属性和方法 | **属性**/**方法** | **说** **明** | | ----------------------- | ------------------------------------------------------------ | | about() | 取消请求 | | getAllResponseHeaders() | 获取响应的所有http头 | | getResponseHeader() | 获取指定http头 | | open(method,url) | 创建请求,method请求类型,(GET,POST) | | send() | 发送请求 | | setRequestHeader() | 指定请求的Http头 | | readyState属性 | 0:未初始化。未调用 open() 方法1:启动。已经调用 open() 方法,未调用 send() 方法2:发送。已经调用 send() 方法,未接收到响应3:接收。已经接收到部分数据4:完成。已经接收到全部数据,可以在客户端使用 | | status | 服务器返回的 HTTP 请求响应值: 200 表示请求成功 202 表示请求被接收但未处理完成 400 表示错误的请求 404 表示资源未找到 500 表示内部服务器错误 | | responseText | 服务器返回文本 | | responseXML | 服务器返回XML,可以当作DOM处理 | ### ajax基本使用 使用ajax发送一个请求:点击p标签发送请求,并将服务器发回的响应数据显示在p标签中。 ```html

点击发送请求

``` ### get请求 > 我们在前边的演示代码中,设置请求类型时写的是“GET”。 > > 浏览器向服务器发送请求的使用的是`http协议`,http协议中规定的请求类型有9种,最常用的方式为"GET"与"POST"。 > > 在未指明请求类型时,页面中的请求使用的都是"GET"类型。 - GET请求的特点 - 请求的数据会被自动缓存 - 请求的记录会在历史记录中 - 请求可被设置为书签 - 一般不用来处理敏感数据 - 请求是有长度限制 - 一般用来获取数据 - ajax使用get发送请求 ```html

点击发送请求

``` ### post请求 - post请求的特点 - 请求的数据不会缓存 - 请求的记录不会在历史记录中 - 请求可被设置为书签 - 请求是有长度限制 - ajax使用post发送请求 ```html

点击发送请求

``` ### 8.1 用户注册 ## AJAX处理响应数据 使用ajax与服务器进行数据交互时,服务器返回的数据类型一般是XML或者是JSON。 - XML数据处理:`这是一种古老的数据交互方式,现在几乎已经绝迹` - JSON数据处理:正在使用的前后段数据交互方式 > 我们在使用hbuilder打开网页时,就是通过hbuilder内置的服务器打开的页面。所以接下来的案例,我们直接使用hbuilder内置的服务器进行演示。 ### 8.2热映电影列表 # jQuery ## DOM复习 点击显示div并设置内容 JavaScript的原生DOM操作包含了`标签获取`、`操作标签内容`、`操作标签属性`、`操作标签事件`、`操作标签样式`。 使用以下代码完成: - 点击显示按钮1显示所有div - 点击按钮2给所有div添加内容,多次点击可以连续添加 - 点击div弹出,将div的内容设置为标签提示信息(title) ```html
``` ## 9.1jquery概述 > 1. 了解什么是jQuery > 2. 了解jquery的作用 > 3. 了解jquery的版本 > 4. 掌握jquery的基本使用方式 > 5. 掌握jQuery与javascript的关系 > 6. 了解jquery的入口函数 > 7. 了解jquery的链式调用 ### 9.1.1jQuery的概念及作用 jQuery 是一个强大的 JavaScript 库,它简化了遍历 HTML 文档、操作 DOM、处理事件、执行动画和 AJAX 等操作。 - 使用外部js封装函数的方式,讲解什么是jquery - 在网页中引入外部js文件,直接调用方法,完成获取元素的操作 ```js var $ = { gettag: function gettag(a) { if (document.getElementById(a)) { return document.getElementById(a) } else if (document.getElementsByClassName("div")[0]) { return document.getElementsByClassName("div")[0] } else if (document.getElementsByTagName("div")[0]) { return document.getElementsByTagName("div")[0] } // return undefined } } ``` ```html jquery 就是一个这样的外部js文件,里边封装大量的方法,这些方法用来简化 大部分的DOM操作、文档操作、事件操作、动画及ajax 。 ``` ### 9.1.1jquery的版本 jquery官网下载地址:[http://jquery.com/download/](http://jquery.com/download/) 获取jquery源码的方式挺多的,前端常用的代码编辑器都就可以帮助我们自动创建jquery源码文件。 - jquery的源码的版本很多,基本分为 1.x 2.x 3.x ```html 1.x版本:能够兼容IE678浏览器 2.x版本:不兼容IE678浏览器 1.x和2.x版本jquery都不再更新版本了,现在只更新3.x版本。 3.x版本:不兼容IE678,更加的精简(在国内不流行,因为国内使用jQuery的主要目的就是兼容IE678) ``` - 我们拿到的jquery源码一般会有两种形式 - 压缩版本:适用于生产环境,因为文件比较小,去除了注释、换行、空格等东西 - 未压缩版本,适用于学习与开发环境,源码清晰,易阅读 ### 9.1.2jquery的基本使用方式 jquery的基本使用方式是,`获取jquery源码----引入jquery---编写自己的js代码` ```html 使用jquery重构DOM复习的案例,感受使用jquery的方便快捷 ``` ### 9.1.3掌握jQuery与javascript的关系 - 使用JavaScript中的方法获取页面中的元素返回的对象就是DOM对象 - dom对象只可以使用dom对象的方法和属性 - jquery对象就是使用jquery的方法获取页面中的元素返回的对象就是jQuery对象。 - jquery对象只能使用jquery对象的方法 ```javascript // 原生的DOM 获取的标签,每个标签对应一个对象数据{},我们操作这个对象数据就更操作标签 // 我们获取的如果是数组[],需要循环数组,挨个操作每个对象数据 var divs = document.getElementsByClassName("div"); //[{},{},{}] var div1 = divs[0] ; //{} console.log(divs) console.log(div1) // jquery 在表示标签时,都是以数组形式表示[] var divss = $("div") ;//[{},{},{}] var div11 = $("#div1");//[{}] // jquery 操作标签时,每个方法,内部都会自动循环 // jquery获取的标签叫做juqery对象===使用原生js获取的叫DOM对象 // 这两个对象他们的操作方式不互通。jquery对象只能使用jqueyr提供的方法.... ``` - jquery对象转换DOM对象 ```javascript // jquery 对象([]) 转 DOM对象 // jqueyr对象这个数中,每一个元素是DOM对象 var div1 = $("div")[1] var div2 = document.getElementsByClassName("div1")[0] // jquery 对象([]) 转 DOM对象 // jquery 对象有一个get(index) 可以从jqueyr对象中获取指定索引的DOM对象 var div3 = $("div").get(1) console.log(div1) console.log(div2) console.log(div3) console.log(div) ``` - DOM对象转换jquery对象 ```javascript // 原生的DOM 对象,转换jqueyr对象。需要花钱 // 将dom对象放在$()中,得到的结果就是jquery对象 $("div").click(function(){ // 这个this表示标签,但是他表示的是原生的DOM 对象 console.log(this) $(this).css({color:"red"}) }) ``` - - ### jquery的入口函数 ```javascript //原生js,的入口 load ,保证页面加载之后(整个页面全部加载),再执行js。 一个页面只能有一个js入口。 window.onload = function(){ console.log(3) } window.onload = function(){ console.log(4) } //jquery 入口ready:保证 页面加载完毕(DOM加载,不包含图片等非文字资源)。一个可以有多个jquery入口 $(document).ready(function(){ console.log(1) }) $(function(){ console.log(2) }) ``` ### 9.1.4jquery的链式调用 jquery在使用时是可以链式调用的。 链式调用的实际上就是通过对象上的方法将对象再返回回来,这样对象就可以继续调用其他方法,这就是链式调用。 ```html 使用链式调用给div添加内容,设置属性,设置样式
1
1
1
``` ## 9.2jquery选择器 > 1. 掌握基本选择器的使用 > 2. 掌握层次选择器的使用 > 3. 掌握基本过滤选择器的使用 > 4. 掌握内容过滤选择器的使用 > 5. 掌握属性过滤选择器的使用 > 6. 掌握子元素过滤选择器的使用 > 7. 掌握表单对象属性选择器的使用 jquery使用`$()`获取jquery对象,参数可以是选择器。jquery支持css中几乎所有的选择器。 另外jquery还扩展了一些选择器。这些选择器css中并没有,是jquery中定义的。 ### 9.2.1基本选择器 | 名称 | **选择器** | **语 法** | 描述 | | ---------- | ------------------- | ----------------------- | ------------------------------------ | | 标签选择器 | Element | $(“div”) | 选择标签名是div的元素 | | ID选择器 | #id | $(“#demo”) | 选择id是demo的元素 | | 类选择器 | .class | $(“.demo”) | 选择类名class是demo的元素 | | 群组选择器 | Selector1,selector2 | $(“div,span,p,myClass”) | 使用逗号分隔,只要符合条件之一就可。 | | 通配选择符 | * | $(“*”) | 选择所有元素 | ### 9.2.2层次选择器 | 名称 | **选择器** | **语 法** | 描述 | | ---------- | ----------------------------- | --------------- | ------------------------------------ | | 后代选择器 | **$(“ancestor descendant ”)** | $(“div span”) | 选取div中所有的span | | 子代选择器 | **$(“parent > child”)** | $(“div > span”) | 选取div元素下名为span的子元素 | | 兄弟选择器 | **$(“prev + next”)** | $(“.one + div”) | 选取class为.one的下一个div元素 | | 兄弟选择器 | **$(“prev ~ siblings”)** | $(“#two~div”) | 选取id为two的元素后面所有div兄弟元素 | ### 9.3.1基本过滤选择器 | **过滤器** | **语 法** | 描述 | | ------------------ | ------------------------ | ---------------------------------------- | | **:first** | $(“div:first”) | 选取所有
元素中第一个
元素 | | **:last** | $(“div:last”) | 选取所有
元素中最后一个
| | **:not(selector)** | $(“input:not(.myClass)”) | 选取class不是myClass的元素 | | **:even** | $(“input:even”) | 选取索引是偶数的元素(索引从0开始) | | **:odd** | $(“input:odd”) | 选取索引是奇数的元素(索引从0开始) | | **:eq(index)** | $(“input:eq(1)”) | 选取索引等于1的元素 | | **:gt(index)** | $(“input:gt(1)”) | 选取索引大于1的元素 | | **:lt(index)** | $(“input:lt(4)”) | 选取索引小于4的元素 | | **:header** | $(“:header”) | 选取所有标题元素

| | **:animated** | $(“div:animated”) | 选取正在执行动画的
元素 | ### 9.3.3内容过滤选择器 | **过滤器** | **语 法** | **描述** | | ------------------- | --------------------- | ----------------------------------------- | | **:contains(text)** | $(“div:contains(我)”) | 选取含有文本“我”的
元素 | | **:empty** | $(“div:empty”) | 选取不包含子元素(文本元素)的
空元素 | | **:has(selector)** | $(“div:has(p)”) | 选取含有

元素的

元素 | | **:parent** | $(“div:parent”) | 选取拥有子元素(包括文本元素)的
元素 | ### 9.3.2属性过滤选择器 | **过滤器** | **语 法** | **描述** | | -------------------------------------- | ----------------------------- | ---------------------------------------------------- | | **[attribute]** | $(“div[id]”) | 选取所有拥有id属性的元素 | | **[attribute=value]** | #(“div[title=test]”) | 选取元素属性title值为test的
元素 | | **[attribute!=value]** | $(“div[title!=test]”) | 选取元素属性title值不为test | | **[attribute^=value]** | $(“div^=test”) | 选取属性title值为test开头的div元素 | | **[attribute$=value]** | $(“div$=test”) | 选取属性title值为test结尾的div元素 | | **[attribute\*=value]** | $(“div*=test”) | 选取属性title值中包含test的div元素 | | **`[selector][selector2][selectorN]`** | `$(“div[id][title$=’test’]”)` | 选取拥有id属性,且title属性值以test结尾的所有div元素 | ### 9.4.1子元素过滤选择器 | **过滤器** | **语 法** | | --------------------------------------- | ------------------------------------------------------------ | | **:nth-child(index/even/odd/equation)** | :eq(index)只匹配一个元素,而:nth-child将为每一个父元素匹配子元素,并且:nth-child(index)下标从1开始,而:eq(index)是从0开始:nth-child(even) 选取每个父元素下的索引值是偶数的元素:nth-child(odd) 选取每个父元素下的索引值是奇数的元素:nth-child(3n)选取每个父元素下的索引值是3的倍数的元素 | | **:first-child** | :frist只返回单个元素,而:first-child选择符将为每一父元素匹配第一个子元素。例如$(“ul li:first-child”);选取每个
    中的第一个
  • 元素注意$(“ul li :first-child”);选取每个
      中的每一个
    • 元素中的第一个子元素注意第二条语句li和:first-child之间有空格意义完全不一样了 | | **:last-child** | :last只返回单个元素而:last-child选择器将为每个父元素匹配最后一个子元素例如$(“ul li:last-child”);选择每个
        中最后一个
      • 元素 | | **:only-child** | $(“ul li:only-child”)在
          中选取是唯一子元素的
        • 元素。 | ### 9.4.2表单对象属性选择器 | **过滤器** | **语 法** | **描述** | | ------------- | --------------------- | ------------------------------------- | | **:enabled** | $(“#form1 :enabled”) | 选取id为form1 的表单内所有可用的元素 | | **:disabled** | $(“#form1 :disabled”) | 选取id为form2的表单内所有不可用的元素 | | **:checked** | $(“input:checked”) | 选取所有被选中的元素 | | **:selected** | $(“select :selected”) | 选取所有被选中的选项元素下拉列表 | ## jquery对象遍历 使用$()+选择器的方式获取jquery对象之后,可以使用相应的筛选方法对jquery对象进行筛选。 jquery对象的筛选与使用选择获取标签非常类似,但一定要区分他们他们的区别。 - $()+选择器:使用用选择器获取查找标签,获取jquery对象 - jquery对象筛选:是对获取到的jquery对象进行筛选 ### jquery对象过滤 | 方法 | **说明** | | ---------------------- | ---------------------- | | **eq(index)** | 获取第几个 | | **first()** | 获取第一个 | | **last()** | 获取 最后一个 | | **hasClass(class)** | 获取有指定类名的标签 | | **has(expr\|ele)** | 获取有指定子标签的标签 | | is(expr\|obj\|ele\|fn) | 判断是否属于指定的标签 | | not(expr\|ele\|fn) | 排除指定的选择器 | ### jquery对象查找 获取jquery对象的父、子、兄弟 | 方法 | **说明** | | ---------------------- | ------------------ | | **parent()** | 获取父标签 | | parents(*[expr]*) | 获取指定的祖先标签 | | **children(selector)** | 获取子标签 | | **find(selector)** | 获取后代标签 | | siblings(selector) | 获取兄弟标签 | | next() | 下一个兄弟 | | nextAll(*[expr]*) | 之后的所有兄弟 | | prev() | 上一个兄弟 | | prevAll(*[expr]*) | 之前的所有兄弟 | ## jquery对象访问 | 方法 | 说明 | | ---------- | ---------------------- | | each() | 循环jquery对象 | | size() | 获取jquery对象的长度 | | length | 获取jquery对象的长度 | | get(index) | 获取DOM对象 | | index() | 获取在兄弟标签中的索引 | - 案例:09-03-下拉菜单 children - 案例:09-04-突出显示 siblings find - 案例:09-05-手风琴 next parent siblings children - 案例:09-06-淘宝精品 index siblings - 案例:09-07-banner呼吸灯  siblings - 案例:9.2 折叠菜单 children siblings - 案例:9.3 显示隐藏分类功能 is - 案例:9.4 用户注册功能 is each ## 9.5jquery节点操作 本节课的内容主要是: - 创建jquery对象 - 插入jquery对象 - 复制jquery对象 - 删除jquery对象