JavaScript基础
1、什么是 JavaScript 1.1 概述 JavaScript是一门世界上最流行的脚本语言
一个合格的后端人员,必要要精通 JavaScript
1.2 ECMAScript ECMAScript 可以理解为是JavaScript的一个标注
最新为ES6版本,但是大部分浏览器只停留在支持ES5代码上
2、快速入门 2.1 引入JavaScript
内部标签
外部引入
abs.js
test.html
1 <script src ="abc.js" > </script >
测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script src ="js/qj.js" > </script > <script type ="text/javascript" > </script > </head > <body > </body > </html >
2.2 基本语法入门 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <script > var score = 71 ; var name = "john" ; if (score>60 && score<70 ){ alert("60~70" ); }else if (score>70 && score<80 ){ alert("70~80" ); }else { alert("other" ); } /* * console .log(score) 在浏览器的控制台打印变量! system.out.println(); * */ </script >
2.3 数据类型 数值,文本,图形,音频,视频…
变量
number
js不区分小数和整数,Number
1 2 3 4 5 6 132 123.1 1.23e3 -99 NaN Infinity
字符串
‘abc’ “abc”
‘\n’
布尔值
true, false
逻辑运算
1 2 3 4 5 &&:两个都为真,结果为真 ||:一个为真,结果为真 !:取反
比较运算符(重要)
1 2 3 4 5 =:赋值 ==:等于(类型不一样,值一样,也会判断为true) ===:绝对等于(类型一样,值一样,结果为true)
这是一个JS的缺陷,坚持不要使用==
须知:
NaN===NaN,这个与所有的值都不相等,包括自己
只能通过 isNaN(NaN)
来判断这个数是否是NaN
浮点数问题
1 console.log((1/3) === (1-2/3));
尽量避免使用浮点数进行运算,存在精度问题!
1 Math.abs(1/3-(1-2/3))<0.00000001
null和undefined
数组
Java的数组必须是相同类型的对象,JS中不需要这样!
1 2 3 4 var arr = [1 ,2 ,3 ,4 ,5 ,'hello' ,null ,true ];new Array (1 ,2 ,3 ,'hello' );
取数组下标,如果越界了,就会undefined
对象
对象定义是大括号,数组是中括号~~
每个属性之间用逗号隔开,最后一个不需要添加
1 2 3 4 5 6 var person = { name: "john" , age: 3 , tags: ['js' ,'php' ,'web' ,'...' ] }
取对象的值
1 2 3 4 person.age 3 person.name "john"
2.4 严格检查模式 1 2 3 4 5 6 7 8 9 10 11 <script > 'use strict' ; let i = 1 ; </script >
3、数据类型 3.1字符串
正常字符串,使用单引号,或者双引号包裹
注意转义字符\
1 2 3 4 5 \' \n \t \u4e2d \u#### unicode字符 \x41 Ascll字符
多行字符串编写
1 2 3 4 5 var msg = `hello world 你好 `
模板字符串
1 2 3 4 5 let age = 3 ;let name = 'john' ;let msg = `你好,${name} ` ;
字符串长度
字符串的可变性,不可变
大小写转换
1 2 3 student.toLocaleUpperCase() student.toLowerCase()
student.indexOf(‘t’)
substring()
1 2 3 [) student.substring(1 ) student.substring(1 ,3 )
3.2 数组 Array可以包含任意的数据类型
1 2 3 var arr = [1 ,2 ,3 ,4 ,5 ,6 ]; arr[0 ] arr[0 ] = 1
长度
注意:假如给arr.length 赋值,数组大小就会发生变化~,如果赋值过小,元素就会丢失
indexOf,通过元素得到下标索引
字符串的 “1” 和数字的 1 是不同的
slice() 截取Array的一部分,返回一个新数组,类似于 string 中的 substring
push, pop
unshift(), shift()
排序 sort()
1 2 3 (3 ) ["B" , "C" , "A" ] arr.sort() (3 ) ["A" , "B" , "C" ]
元素反转 reverse()
1 2 3 (3 ) ["A" , "B" , "C" ] arr.reverse() (3 ) ["C" , "B" , "A" ]
concat()
1 2 3 4 5 (3 ) ["C" , "B" , "A" ] arr.concat([1 ,2 ,3 ]) (6 ) ["C" , "B" , "A" , 1 , 2 , 3 ] arr (3 ) ["C" , "B" , "A" ]
注意:concat() 并没有修改数组,只是会返回一个新的数组
连接符 join
打印拼接数组,使用特定的字符串连接ei
1 2 3 (3 ) ["C" , "B" , "A" ] arr.join('-' ) "C-B-A"
多维数组
1 2 3 arr = [[1 ,2 ],[3 ,4 ],["5" ,"6" ]] arr[1 ][1 ] 4
数组:存储数据(如何存,如何取,方法都可以自己实现!)
3.3 对象 若按个键值对
1 2 3 4 5 6 7 8 9 10 11 12 13 var 对象名 = { key: 'value' , key: 'value' , key: 'value' } var person = { name: "john" , age: 3 , email: "1234567@qq.com" , score: 0 }
JS中对象,{……}表示一个对象,键值对描述属性 xxxx: xxxx,多个对象之间使用逗号隔开,最后一个属性不加逗号!
JavaScript中的所有的键都是字符串,值是任意对象
对象赋值
1 2 3 4 5 6 person.name "john" person.name = "yu" "yu" person.name "yu"
使用一个不存在的对象属性,不会报错! undifined
动态的删减属性,通过 delete 删除对象的属性
1 2 3 4 delete person.nametrue person {age : 3 , email : "1234567@qq.com" , score : 0 }
动态的添加,直接给新的属性添加值即可
1 2 3 4 person.haha = "haha" "haha" person {age : 3 , email : "1234567@qq.com" , score : 0 , haha : "haha" }
判断属性值是否在这个对象中! xxx in xxx !
1 2 3 4 5 'age' in persontrue 'toString' in persontrue
判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
1 2 3 4 person.hasOwnProperty('toString' ) false person.hasOwnProperty('age' ) true
3.4 流程控制 if判断
1 2 3 4 5 6 7 8 let age = 3 ;if (age>3 ){ alert("haha" ); }else if (age<5 ){ alert("kuwa~" ); }else { alert("kuwa~~" ); }
循环,避免程序死循环
1 2 3 4 5 6 7 8 9 10 let age = 3 ;while (age<100 ){ age++; console .log(age); } do { age++; console .log(age); }while (age<100 )
for循环
1 2 3 for (let i = 0 ;i < 100 ;i++){ console .log(i); }
forEach循环
5.1引入的
1 2 3 4 5 let arr = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ];arr.forEach(function (value ) { console .log(value); })
for…in
1 2 3 4 for (var num in age){ console .log(age[num]); }
3.5 Map和Set
ES6 的新特性~
Map:
1 2 3 4 5 6 7 8 9 var map = new Map ([['Tom' ,100 ],['Jack' ,98 ],['Kris' ,66 ]]);var name = map.get('Tom' ); map.set('admin' ,123456 ); map.delete('Tom' );
Set:无序不重复的集合
1 2 3 4 var set = new Set ([3 ,1 ,1 ,1 ,]); set.add(2 ); set.delete(1 ); console .log(set.has(3 ));
3.6 iterrator
ES6新特性
遍历数组
1 2 3 4 5 var arr = [3 ,4 ,5 ];for (var x of arr){ console .log(x); }
遍历map
1 2 3 4 var map = new Map ([['Tom' ,100 ],['Jack' ,98 ],['Kris' ,66 ]]);for (var x of map){ console .log(x); }
遍历set
1 2 3 4 var set = new Set ([3 ,2 ,4 ,1 ,7 ]); for (var x of set){ console .log(x); }
4、函数 4.1 定义函数
定义方式一
绝对值函数
1 2 3 4 5 6 7 function abs (x ) { if (x>=0 ){ return x; }else { return -x; } }
一旦执行到 return 代表函数结束,返回结果!
如果没有执行 return 函数执行完也会返回结果,结果就是 undefined
定义方式二
1 2 3 4 5 6 7 var abs = function (x ) { if (x>=0 ){ return x; }else { return -x; } }
function(x){….} 这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数!
方式一和方式二等价!
调用函数
参数问题:JS可以传任意个参数,也可以不传参数
参数进来是否存在问题?
假设不存在参数,如何规避?
1 2 3 4 5 6 7 8 9 10 11 var abs = function (x ) { if (typeof x!= 'number' ){ throw 'Not a number' ; } if (x>=0 ){ return x; }else { return -x; } }
arugument
arguments
是一个JS免费赠送的关键字
代表,传递进来的所有参数,是一个数组
1 2 3 4 5 6 7 8 9 10 11 var abs = function (x ) { console .log("x=>" +x); for (var i = 0 ;i < arguments .length;i++){ console .log(arguments [i]); } if (x>=0 ){ return x; }else { return -x; } }
问题: argument 包含所有的参数,我们有时候想使用多余的参数来进行附加操作。需要排除已有的参数~
rest
以前:
1 2 3 4 5 if (arguments .length>2 ){ for (var i =2 ;i<arguments .length;i++){ } }
ES6引入的新特性,获取除了已经定义的参数之外的所有参数~…
1 2 3 4 5 function aaa (a,b,...rest ) { console .log("a=>" +a); console .log("b=>" +b); console .log(rest); }
rest 参数只能写在最后面,必须用 … 标识。
4.2 变量作用域 在JS中, var 定义变量实际是有作用域得。
假设在函数体中声明,则在函数体外不可以使用~ (非要想实现得话,后面可以研究闭包
)
1 2 3 4 5 6 function qj ( ) {var x = 1 ;x = x + 1 ; } x = x + 2 ;
如果两个函数使用了相同得变量名,只要在函数内部,就不冲突
1 2 3 4 5 6 7 8 9 10 function qj ( ) { var x = 1 ; x = x + 1 ; } function qj2 ( ) { var x = "A" ; x = x + 1 ; }
内部函数可以访问外部函数的成员,反之则不行
1 2 3 4 5 6 7 8 function qj ( ) { var x = 1 ; function qj2 ( ) { var y = x + 1 ; } var z = y + 1 ; }
假设,颞部函数变量和外部函数变量重名!
1 2 3 4 5 6 7 8 9 10 function qj ( ) { var x = 1 ; function qj2 ( ) { var x = 'A' ; console .log('inner' +x); } console .log('outer' +x); qj2(); }
假设JS中函数查找变量从自身函数开始~,由”内“向”外“查找,假设外部存在这个同名得函数变量,则内部函数回屏蔽外部函数变量。
提升变量的作用域
1 2 3 4 5 function qj ( ) { var x = 'x' + y; console .log(x); var y = 'y' ; }
结果:xundefined
说明:JS执行引擎,自动提升了 y 的声明,但是不会提升变量 y 的赋值;
1 2 3 4 5 6 function qj2 ( ) { var y; var x = 'x' + y; console .log(x); y = 'y' ; }
这个是在JS建立之初就存在的特性。养成规范:所有的变量定义都放在函数的头部,不要乱放,便于代码维护;
1 2 3 4 5 6 function qj2 ( ) { var x = 1 , y = x + 1 , z,i,a; }
全局函数
1 2 3 4 5 6 7 var x = 1 ;function f ( ) { console .log(x); } f(); console .log(x);
全局对象 window
1 2 3 var x = 'xxx' ;alert(x); alert(window .x);
alert() 函数本身也是一个 window
变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var x = 'xxx' ;window .alert(x);var old_alert = window .alert;window .alert = function ( ) {} window .alert('123' );window .alert = old_alert;window .alert('456' );
JS实际上只有一个全局作用域,任何变量函数(函数也可以视为变量),假设没有函数在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错 ReferencErro
规范
由于我们所有的全局变量都会绑定到我们的 window 上。如果不同的JS文件,使用了相同的全局变量,冲突~>如何能够减少冲突?
1 2 3 4 5 6 7 8 var JohnApp = {};JohnApp.name = 'John' ; JohnApp.add = function (a,b ) { return a + b; }
把自己的代码全局放入自己定义的唯一空间名字中,降低全局命名冲突的问题。
JQuery
局部作用域 let
1 2 3 4 5 6 function aaa ( ) { for (var i = 0 ; i < 100 ; i++) { console .log(i); } console .log(i+1 ); }
ES6 let关键字,解决局部作用域冲突的问题
1 2 3 4 5 6 function aaa ( ) { for (let i = 0 ; i < 100 ; i++) { console .log(i); } console .log(i+1 ); }
建议大家都使用 let
取定义局部作用域的变量;
常量 const
在ES6之前,怎么定义常量:只有用全部大写字母命名的变量就是常量;建议不要修改这样的值
1 2 3 4 5 var PI = 3.14 ;console .log(PI);PI = 321 ; console .log(PI);
在ES6引入了常量关键字 const
1 2 3 4 5 const PI = 3.14 ; console .log(PI);PI = 321 ; console .log(PI);
4.3 方法
定义方法
方法就是把函数放在对象里面,对象只有两个东西:属性和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var john = { name: 'yu' , birth: 2020 , age: function ( ) { var now = new Date ().getFullYear(); return now - this .birth; } } john.name john,age()
this. 代表什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 function getAge ( ) { var now = new Date ().getFullYear(); return now - this .birth; } var john = { name: 'yu' , birth: 2020 , age: getAge }
this 是无法指向的,是默认指向调用它的那个对象;
apply
在JS中,可以控制 this 指向!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function getAge ( ) { var now = new Date ().getFullYear(); return now - this .birth; } var john = { name: 'yu' , birth: 2020 , age: getAge } var tom = { name: 'tom' , birth: 2000 , age: getAge } getAge.apply(john,[]); getAge.apply(tom,[]);
5、内部对象
标准对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 typeof (123 )"number" typeof ('123' )"string" typeof (NaN )"number" typeof []"object" typeof {}"object" typeof Math .abs"function" typeof undefined "undefined"
5.1 Date
基本使用
1 2 3 4 5 6 7 8 9 10 11 var now = new Date (); now.getFullYear(); now.getMonth(); now.getDate(); now.getDay(); now.getHours(); now.getMinutes(); now.getSeconds(); now.getTime(); console .log(new Date (1612748116493 ));
转换
1 2 3 4 5 6 var now = new Date (1612748116493 );Mon Feb 08 2021 09 :35 :16 GMT+0800 (中国标准时间) now.toLocaleString() "2021/2/8 上午9:35:16" now.toGMTString() "Mon, 08 Feb 2021 01:35:16 GMT"
5.2 JSON
JSON是什么
早期,所有数据传输习惯使用 XML 文件
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
简洁和清晰的层次结构 使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在JS中一切皆为对象,任何JS支持的类型都可以用 JSON 来表示;number,string….
格式:
对象都用 {}
数组都用 []
所有键值对都是用 key:value
JSON 和 JS 对象的转化
1 2 3 4 5 6 7 8 9 10 11 var user = { name: "john" , age: 3 , gender: "male" } var jsonUser = JSON .stringify(user);var obj = JSON .parse('{"name":"john","age":3,"gender":"male"}' );
很多人搞不清楚,JSON 和 JS 对象的区别
1 2 var obj = {a : 'hello' ,b : 'hellob' };var json = '{"a":"hello","b":"hellob"}' ;
5.3 Ajax
原生的 JS 写法 xhr 异步请求
JQuery 封装好的方法 $("#name").ajax("")
axios 请求
6、面向对象编程
原型对象
JavaScript、Java、c#……面向对象;JavaScript有些区别!
在 JavaScript 中这个需要大家换一下思维方式!
原型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var Student = { name: "john" , age: 3 , run: function ( ) { console .log(this .name + " run..." ); } } var xiaoming = { name: "xiaoming" }; xiaoming.__proto__ = Student; var Bird = { fly: function ( ) { console .log(this .name + " fly..." ); } } xiaoming.__proto__ = Bird;
1 2 3 4 5 6 7 8 function Student (name ) { this .name = name; } Student.prototype.hello = function ( ) { alert('hello' ); }
class继承
class
关键字,是在ES6引入的
定义一个类,属性,方法
1 2 3 4 5 6 7 8 9 10 11 12 13 class Student { constructor (name ) { this .name = name; } hello ( ) { alert('helllo' ) } } var xiaoming = new Student('xiaoming' );var xiaohong = new Student('xiaohong' );xuaiming.hello()
继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Student { constructor (name ) { this .name = name; } hello ( ) { alert('helllo' ) } } class Pupple extends Student { constructor (name,grade ) { super (name); this .grade; } myGrade ( ) { alert("I am a pupple!" ); } } var xiaoming = new Student('xiaoming' );var xiaohong = new Pupple('xiaohong' ,1 );
本质:查看对象原型
原型链
7、操作BOM对象(重点)
浏览器介绍
JavaScript和浏览器的关系?
JavaScript的诞生就是为了让他能够在浏览器中运行!
BOM:浏览器对象模型
IE 6 ~ 11
Chrome
Safari
FireFox Linux
三方
window
window 代表浏览器窗口
1 2 3 4 5 6 7 8 9 10 window .alert(1 )window .innerHeight137 window .innerWidth847 window .outerHeight681 window .outerHeight681
Navigator(不建议使用)
Navigator 封装了浏览器的信息
1 2 3 4 5 6 7 8 navigator.appName "Netscape" navigator.appVersion "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" navigator.userAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" navigator.platform "Win32"
大多数时候,我们不会使用 navigator
对象,因为回被认为修改
不建议使用这些属性来判断和编写代码
screen
代表屏幕尺寸
1 2 3 4 screen.width 1536 pxscreen.height 864 px
location
location 代表当前页面的 URL 信息
1 2 3 4 5 6 host: "www.baidu.com" href: "https://www.baidu.com/" protocol: "https:" reload: ƒ reload() location.assign('https://www.szu.edu.cn' )
document(内容; DOM)
document 代表当前的页面,HTML DOM文档树
1 2 3 4 document .title"深圳大学" document .title = '信息中心' "信息中心"
获取具体的文档树结点
1 2 3 4 5 6 7 8 9 <dl id ="app" > <dt > Java</dt > <dd > JavaSE</dd > <dd > JavaEE</dd > </dl > <script > var dl = document .getElementById('app' ); </script >
获取cookie
劫持 cookie 原理
www.taobao.com
1 2 <script src ="aa,js" > </script >
服务器端可以设置 cookie: httpOnly
history(不建议使用)
history 代表浏览器的历史记录
1 2 history.back(); history.forward();
8、操作DOM对象
核心
浏览器网页就是一个 DOM 树形结构!
更新:更新 DOM 结点
遍历 DOM 结点:得到 DOM 结点
删除:删除一个 DOM 结点
添加:添加一个新的结点
要操作一个 DOM 结点,就必须要先获得这个 DOM 结点
获得 DOM 结点
1 2 3 4 5 6 7 8 9 var h1 = document .getElementsByTagName('h1' );var p1 = document .getElementById('p1' );var p2 = document .getElementsByClassName('p2' );var father =document .getElementById('father' );var childens = father.childrenp[index];
这是原生代码,之后我们尽量都是用JQuery
更新节点
1 2 3 4 5 <div id ="id1" > </div > <script > var id1 = document .getElementById('id1' ); </script >
操作文本
操作JS
1 2 3 id1.style.color = 'red' id1.style.fontSize = '20px' ; id1.style.padding = '2em' ;
删除结点
删除结点的步骤:先获取父节点,再通过父节点删除自己
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <div id ="father" > <h1 > 标题1</h1 > <p id ="p1" > p1</p > <p class ="p2" > p2</p > </div > <script > var self = document .getElementById('p1' ); var father = p1.parentElement; father.removeChild(p1); father.removeChild(father.children[0]); father.removeChild(father.children[0]); father.removeChild(father.children[0]); </script >
注意:删除多个节点的时候,children 是在时刻变化的,删除节点的时候一定要注意!
插入节点
我们获得了某个 DOM 节点,假设这个 DOM 结点时空的,我们通过 innerHTML 就可以增加一个元素了,但是这个 DOM 节点已经存在元素了,我们就不能这么干了!会产生覆盖
追加
1 2 3 4 5 6 7 8 9 10 11 12 <p id ="js" > javascript</p > <div id ="list" > <p id ="se" > javase</p > <p id ="ee" > javaee</p > <p id ="me" > avame</p > </div > <script > var js = document .getElementById('js' ), list = document .getElementById('list' ); list.appendChild(js); </script >
效果
创建一个新的标签,实现插入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <p id ="js" > javascript</p > <div id ="list" > <p id ="se" > javase</p > <p id ="ee" > javaee</p > <p id ="me" > avame</p > </div > <script > var js = document .getElementById('js' ), list = document .getElementById('list' ); var newP = document .createElement('p' ); newP.id = 'newP' ; newP.innerText = 'Hello' ; list.appendChild(newP); var myScript = document .createElement('script' ); myScript.setAttribute('type' ,'text/javascript' ); var body = document .getElementsByTagName('body' ); body[0 ].style.backgroundColor = '#a94751' ; var myStyle = document .createElement('style' ); myStyle.setAttribute('type' ,'text/css' ); myStyle.innerHTML = 'body{background-color: blue}' ; document .getElementsByTagName('head' )[0 ].appendChild(myStyle); </script >
insert
1 2 3 4 5 var ee = document .getElementById('ee' );var js = document .getElementById('js' );var list = document .getElementById('list' );list.insertBefore(js,ee);
9、操作表单(验证)
表单是什么 form DOM树
文本框 text
下拉框 <select>
单选框 radio
多选框 checkbox
隐藏域 hidden
密码框 password
……
表单的目的:提交信息
获得提交的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <form action ="#" method ="post" > <p > <span > 用户名: </span > <input type ="text" id ="username" > </p > <p > <span > 性别: </span > <input type ="radio" name ="sex" value ="male" id ="male" > 男 <input type ="radio" name ="sex" value ="female" id ="female" > 女 </p > </form > <script > var input_text = document .getElementById('username' ); var male_radio = document .getElementById('male' ); var female_radio = document .getElementById('female' ); input_text.value; input_text.value = '123' ; male_radio.checked; female_radio.checked = true ; </script >
提交表单,md5加密密码,表单优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <form action ="https://www.baidu.com/" method ="post" onsubmit ="return aaa()" > <p > <span > 用户名:</span > <input type ="text" id ="username" name ="username" required > </p > <p > <span > 密码:</span > <input type ="password" id ="input-password" required > </p > <input type ="hidden" id ="md5-password" > <button type ="submit" > 提交</button > </form > <script > function aaa ( ) { var uname = document .getElementById('username' ); var pwd = document .getElementById('input-password' ); var md5pwd = document .getElementById('md5-password' ); md5pwd.value = md5(pwd.value); return true ; }
10、jQuery JavaScript
jQuery库,里面存在大量的 JavaScript 函数
获取jQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script src ="jquery-3.5.1.js" > </script > </head > <body > <a href ="" id ="test-jquery" > 点我</a > <script > $('#test-jquery' ).click(function ( ) { alert('hello,jquery' ); }) </script > </body > </html >
选择器
$(selector).action()
1 2 3 4 5 6 7 8 9 10 11 12 document .getElementsByTagName();document .getElementById();document .getElementsByClassName();$('p' ).click(); $('#id1' ).click(); $('。class1' ).click();
文档工具站:https://jquery.cuishifeng.cn/
事件
鼠标事件,键盘事件,其他事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script src ="jquery-3.5.1.js" > </script > <style > #divMove { width: 500px; height: 500px; border: 1px solid red; } </style > </head > <body > mouse: <span id ="mouseMove" > </span > <div id ="divMove" > 在这里移动鼠标试试 </div > <script > $(function ( ) { $('#divMove' ).mousemove(function (e ) { $('#mouseMove' ).text('x: ' +e.pageX + 'y: ' +e.pageY) }) }) </script > </body > </html >
操作 DOM
节点文本操作
1 2 3 4 $('#test-ul li[name=python]' ).text(); $('#test-ul li[name=python]' ).text('123' ); $('#test-ul' ).html(); $('#test-ul' ).html('<span>123</span>' );
CSS的操作
1 $('#test-ul li[name=python]' ).css("color" ,"red" );
元素的显示和隐藏:本质 display = none;
1 2 $('#test-ul li[name=python]' ).show(); $('#test-ul li[name=python]' ).hide();
娱乐测试
1 2 3 $(window ).width(); $(window ).height(); $('#test-ul li[name=python]' ).toggle();
未来ajax()
小技巧
巩固JS (看 jQuery 原码,看游戏原码!)
巩固HTML,CSS(扒网站,全部 down 下来,然后对应修改看效果~)