概述
Javascript 一种Web的编程语言,是互联网最流行的脚本语言。可以插入到HTML中,被所有的浏览器所执行。
ECMAScript 6,简称 ES6。ECMAScript 可以理解是 Javascript 的标准化规范。
使用方式
引入外部文件,js代码可以写在后缀为js文件
// main.js
// javascript 代码写在这个文件
// ...
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<script src="main.js"></script>
</head>
<body>
</body>
</html>
嵌入到HTML内部使用
<!DOCTYPE html>
<html>
<head>
<script>
// javascript代码写在这里
// ...
</script>
</head>
<body>
</body>
</html>
js命名严格区分大小写
简述数据类型
js的数据类型有数值、文本、图形、音频、视频等等
变量定义格式
var 全局变量 = 值;
let 局部变量 = 值;
变量名不能以数字开头,可以以字母、下划线_和美元符号$开头
注意:
- null 表示空,是一种表示空的数据类型
- undefined 表示未定义,说明变量未声明或声明但未初始化,依然为未定义
严格检查模式
'user strict'; // 严格检查模式,必须写在第一行
数字
不区分小数和整数,例如:
123 // 整数
123.1 // 浮点数
1.234e3 // 科学计数法
-99 // 负数
NaN // Not a Number
Infinity // 无穷大
字符串
用单引号或双引号表示,例如:
"abc"
'abc'
布尔
有两个值true或false
数组
使用中括号[]表示。这里数组,每个元素可以不相同,但建议保持使用一样的数据类型
例如:
var ia = [ 1,2,3,4 ];
var sa = [ "hello", "world" ];
var ba = [ true, false ];
var matrix = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ];
对象
使用大括号{}表示,对象的属性以 属性名:值
格式表示,属性之间用逗号隔开,最后的属性不加逗号
var person = {
name: "zhangsan",
age: 13
}
var personName = person.name
var personAge = person.age
null
表示一个变量为空
var a = null;
运算符
逻辑运算符
&& 短路与
|| 短路或
! 否
比较运算符
!= 不等于
== 等于,表示值相等返回true
=== 绝对等于,表示类型相等,值也相等,返回true
> 大于
>= 大于等于
< 小于
<= 小于等于
建议使用 === ,而不是 ==
注意:
-
NaN === NaN,NaN和任何数或NaN比较相等返回false
-
isNaN方法,判断变量是否为NaN
其他
进一步了解数据类型
字符串
1、转义字符
\\ 反斜杠
\' 单引号
\" 双引号
\n 换行符
\t 制表符
\u4e2d unicode字符 \u0000~\uffff 十六进制
\x41 ascii字符 \x00~\x7f 十六进制
2、多行字符串
var str = `hello
world`;
3、模式字符串
var world = "world!";
var str = `hello, ${world}`; // 结果:"hello, world!"
4、字符串长度
var str = "hello, javascript";
var len = str.length;
5、字符串可变性与否
字符串可通过下标取出包含的字符,如:str[0]
。字符串不可变,即使 str[0] = 'b';
,也不能改变 str里面的值。
6、大小写转换
var str = "student";
str.toUpperCase();
str.toLowerCase();
7、子字符串
var str = "student";
var sub = str.substring(0, 3);
8、索引
var str = "student";
var idx = str.indexOf('t');
数组
1、长度
var arr = [ 1, 2, 3, 4, 5 ];
var len = arr.length;
长度可变,数组大小也会改变。如果长度变小,数组元素会丢失;如果长度变大,数组后面填充empty,其实是undefined。
2、索引
var arr = [ 1, 2, 3, 4, 5 ];
var idx = arr.indexOf(2);
3、分片
var arr = [ 1, 2, 3, 4, 5 ];
var subarr = arr.slice(1, 4); // 取下标1到5(不包含)的子数组
4、添加和移除尾部元素
var arr = [ 1, 2, 3, 4, 5 ];
arr.push(6, 7); // 函数参数是可变参数,添加一或多个元素到尾部
var lastValue = arr.pop(); // 移除元素
5、添加和移除首部元素
var arr = [ 1, 2, 3, 4, 5 ];
arr.unshift(-2, 0); // 函数参数是可变参数,添加一或多个元素到首部
var firstValue = arr.shift(); // 移除元素
6、排序
var arr = [ 3, 1, 5, 4, 2 ]
arr.sort();
7、元素反转
var arr = [ 1, 2, 3, 4, 5 ];
arr.reverse();
8、合并
不改变原数组,返回合并后的数组
var arr = [ 1, 2, 3, 4, 5 ];
arr.concat([ 6, 7, 8] );
9、连接
将数组元素连接成字符串,参数为连接符,默认为","
var arr = [ 1, 2, 3, 4, 5 ];
var str = arr.join("-"); // 结果:1-2-3-4-5
10、多维数组
取值
var matrix = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ];
var value = matrix[1][1];
对象
以对象person为例:
var person = {
name: "张三",
age: 18,
email: "zhangsan@163.com",
score: 0
};
1、设置属性
person.name = "李四";
person.gender = "男"; // 设置不存在属性,对象增添该属性
2、获得属性值
var personName = person.name;
var gender = person.gender; // 不存在属性,返回undefined,没有报错
3、删除属性
var flag = delete person.gender; // 删除该属性,若属性存在,返回true,否则返回undefined
4、判断对象包含的属性
可以是"属性名" in 对象名
来判断,也可以是对象名.hasOwnProperty(属性名)
。
var exists = "age" in person; // 存在返回true,否则返回false
exists = person.hasOwnProperty("name"); // 与上行类似
他们区别,in还可以判断某个方法是否在这个对象,hasOwnProperty方法显然不行。
例如:
"toString" in person; // 结果:true
person.hasOwnProperty("toString"); // 结果: false
流程控制
if分支
var score = 88;
if (score < 0 || score > 100) {
alert("分数在不合理范围");
}
if (score >= 90) {
console.log("优秀");
} else if (score >= 80) {
console.log("良好");
} else if (score >= 70) {
console.log("中等");
} else if (score >= 60) {
console.log("及格");
} else {
console.log("不及格");
}
console.log(…) 在浏览器控制台输出消息。alert(…) 浏览器弹窗显示消息
while循环
var i = 0;
while (i < 5) {
console.log(i);
i++;
}
do {
i--;
console.log(i);
} while(i > 0);
for循环
for (let i = 0; i < 5; i++) {
console.log(i);
}
foreach循环
var arr = [ 1, 2, 3, 4, 5 ];
// 不建议使用 for .. in 遍历数组,如果arr新增属性,也会被遍历出来,有漏洞
for (let idx in arr) {
console.log(arr[idx]);
}
for (let val of arr) {
console.log(val);
}
var person = {
name: "张三",
age: 18,
email: "zhangsan@163.com",
score: 0
};
for (let key in person) {
console.log(person[key]);
}
集合
map
map增删改查
var map = new Map([ ["jack", 90],["rocco", 88] ]); // 新建Map 可传参:二维数组 表示键值对
map.set("tom", 100); // 增
map.delete("tom"); // 删:成功返回true,否则返回false
map.set("rocco", 100); // 改
map.get("jack"); // 查
遍历map
for (let x of map) {
console.log(x[0] + " => " + x[1]);
}
set
set增删查
var set = new Set([1,2,3,3]);
set.add(4); // 增
set.delete(3); // 删
set.has(2); // 查
遍历set
for (let x of set) {
console.log(x);
}
函数
定义函数
方式1
function methodName(paramName) {
//...
return returnVal;
}
function abs(x) {
if (typeof x !== "number") {
throw "arg x not a number";
}
return x >= 0 ? x : -x;
}
var val = abs(-2);
方式2
var methodName = function(paramName) {
//...
return returnVal;
}
var abs = function(x) {
if (typeof x !== "Number") {
throw "arg x not a number";
}
return x >= 0 ? x : -x;
}
var val = abs(-2);
通过 typeof 得到变量的类型,进行类型判断。throw + 异常信息 就可以抛出异常
arguments关键字
arguments包含函数的所有参数,其实是数组
function log(str) {
if (typeof str !== "String") {
throw "arg str not a String";
}
if (arguments.length == 1) {
console.log(str);
} else if (arguments.length > 1) {
console.log(str);
for (let i = 1; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
}
log("hello", "world", "!");
可变参数
function log(str, ...rest) {
if (typeof str !== "String") {
throw "arg str not a String";
}
console.log(str);
for (let msg of rest) {
console.log(msg);
}
}
log("hello", "world", "!");
作用域
在函数内部声明的局部变量,只能在其函数内部使用。
function f1() {
var x = 1;
function f2() {
x++;
console.log(x);
}
return f2;
}
var f = f1();
f();
这里函数f2是个闭包,f2内部能访问到f1中的变量x,并能自增1。f1返回值为f2。那么函数外部可以通过f1的返回值访问到f1内部的局部变量。
在函数外声明的全局变量,能被所有函数访问。全部的全局变量会绑定为全局对象window的属性。
var global_x = 1;
function f1() {
console.log(global_x);
}
console.log(window.global_x);
函数查找变量,从其内部往外查找,直到全局作用域,内部覆盖外部同名变量。
注意:
- 建议函数内部所有声明的变量的位置都放在函数体的头部。不该在需要某一变量的地方声明。
- 建议所有的全局变量,放到同一个对象中,这个对象绑定为window属性,这个属性里面再放入许多的全局变量,来减少命名冲突。比如:jQuery 这个库的全局变量放到了名为"jQuery"的对象中,其还有一个别名:$。
let关键字
解决局部作用冲突问题。建议函数局部变量使用let声明
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i+1);
for (let i = 0; i < 5; i++) {
console.log(i+1);
}
// console.log(i+1);// ! let声明的i不会在for循环外生效,而var会
const关键字
定义常量,使用关键字const
const PI = "3.1415";
// PI = "123"; // ! 常量PI只读,不能修改
方法
对象包含的变量为属性,对象包含的函数为方法
方式1
var person = {
name: "zhangsan",
birth: 1999,
age: function() {
var now = new Date().getFullYear();
return now - this.birth;
}
}
person.age();
方法使用对象的属性,要用 this.属性名 获取。
方式2
function getAge() {
var now = new Date().getFullYear();
return now - this.birth;
}
var person = {
name: "zhangsan",
birth: 1999,
age: getAge
}
person.age();
apply
控制函数中this的指向
function getAge() {
var now = new Date().getFullYear();
return now - this.birth;
}
var person = {
name: "zhangsan",
birth: 1999,
age: getAge
}
getAge.apply(person, []);
内部对象
标准对象
typeof 123;
"number"
typeof "123";
"string"
typeof true;
"boolean"
typeof NaN;
"number"
typeof [];
"object"
typeof {};
"object"
Date
常用方法
var now = new Date();
now.getFullYear();
now.getMonth(); // 0-11
now.getDate();
now.getDay(); // 星期几
now.getHours();
now.getMinutes();
now.getSeconds();
now.getTime(); // 时间戳
now = new Date(1629555024108);
日期转文本
var now = new Date(1629555024108);
now.toLocaleString();
JSON
对象转JSON字符串
var person = {
name: "张三",
age: 18,
email: "zhangsan@163.com",
score: 0
};
var jsonPerson = JSON.stringify(person);
console.log(jsonPerson);
JSON字符串转对象
var person = JSON.parse('{"name":"张三","age":18,"email":"zhangsan@163.com","score":0}');
console.log(person.name)
面向对象
原型对象
function Student(name) {
this.name = name;
}
Student.prototype.hello = function(){
alert('hello');
};
// 继承
function Pupil(name, age) {
Student.call(this,name);
this.age = age;
}
Pupil.prototype.showAge = function() {
alert('age:'+this.age);
}
var pu = new Pupil('lisi', 8);
var stu = new Student("zhangsan");
pu.showAge();
stu.hello();
class对象
class Student {
constructor(name) {
this.name = name;
}
hello() {
alert('hello');
}
}
// 继承
class Pupil extends Student {
constructor(name, age) {
super(name);
this.age = age;
}
showAge() {
alert("age:"+this.age);
}
}
var p = new Pupil('lisi', 8);
var s = new Student('zhangsan');
p.showAge();
s.hello();
操作BOM对象
BOM,即 Browser Object Model,中文是浏览器对象模型
几个常见浏览器内核:
- IE
- Chrome
- FireFox
- Safari
window
代表浏览器的窗口
window.alert('..')
window.innerHeight
window.innerWidth
window.outerHeight
window.outerWidth
navigator
封装浏览器信息
navigator.appName
navigator.appVersion
navigator.platform
navigator.userAgent
navigator信息会被人为修改,所以不建议使用这些属性,来编写代码
screen
表示屏幕信息
screen.height
screen.width
location
代表定位
location.host
location.protocol // https
location.href
location.hostname
location.reload() // 刷新
location.assign('..') // 重定向
history
表示历史记录
history.back()
history.forward()
不建议使用,可以是ajax完成页面的局部刷新来替代。
document
表示当前页面,就是HTML 文档树
document.title
document.getElementById('..'); // id选择文档树结点
document.cookie // cookie不安全,服务端需要设置cookie httpOnly属性,那么document.cookie无法访问设置该属性的cookie
操作DOM对象
DOM,即 Document Object Model,中文为文档对象模型。
浏览器页面本质就是DOM树结构
核心操作:
- 更新节点
- 遍历节点
- 删除节点
- 新增节点
假如有这么一个html文件:
<html>
<head>
<meta charset="utf-8">
<title>操作DOM对象</title>
<style type="text/css">
.p2 {
color: red;
font-size: 100px;
}
</style>
</head>
<body>
<div id="father">
<h1>一级标题</h1>
<p id="p1">p1</p>
<p class="p2">p2</p>
</div>
<script>
// ... 操作DOM节点
</script>
</body>
</html>
查找节点
// 根据选择器选择元素节点
var h1 = document.getElementsByTagName('h1').item(0);
var p1 = document.getElementById('p1');
var p2 = document.getElementsByClassName('p2').item(0);
var father = document.getElementById('father');
// 获取所有子元素节点
var children = father.children;
// 第一个子元素节点
var first = father.firstElementChild
// 最后一个子元素节点
var last= father.lastElementChild;
// 下一个相邻元素节点
var next = first.nextElementSibling;
// 上一个相邻元素节点
var prev = last.previousElementSibling;
更新节点
h1.innerText = 'h1'; // 修改文本内容
h1.innerHTML = '<strong>h1</strong>'; // 修改超文本内容,可以解析HTML
// 修改元素的css
h1.style.color = 'red';
h1.style.fontSize = '20px';
h1.style.padding = '2em';
删除节点
步骤:首先查找删除节点的父节点,再通过父节点删除
father.removeChild(p1);
var father2 = p1.parentElement; // 获取父元素节点
father2.removechild(p2);
新增节点
新增方法传入的是已有的元素节点,则是元素节点
append
在父节点内部追加一个子节点到尾部
var p3 = document.createElement('p');
p3.setAttribute('id', 'p3');
// p3.id = 'p3'; // 与上行等效
p3.innerText = 'p3';
father.append(p3);
insertBefore
在父节点内部的目标子节点前插入一个节点
var p3 = document.createElement('p');
p3.setAttribute('id', 'p3');
p3.innerText = 'p3';
father.insertBefore(p3, p2); // father内部的目标p2前插入p3
prepend
在父节点内部追加一个子节点到头部部
var p3 = document.createElement('p');
p3.setAttribute('id', 'p3');
p3.innerText = 'p3';
father.prepend(p3);
before
在目标节点前面插入新节点
var p3 = document.createElement('p');
p3.setAttribute('id', 'p3');
p3.innerText = 'p3';
p2.before(p3);
after
在目标节点后面插入新节点
var p3 = document.createElement('p');
p3.setAttribute('id', 'p3');
p3.innerText = 'p3';
p2.after(p3);
验证表单
登录或注册表单的验证
假如有这样一个html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>验证表单</title>
<script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.18.0/js/md5.min.js"></script>
</head>
<body>
<div>
<form action="#" method="post" onsubmit="return checkForm()">
<label>用户名:</label>
<input type="text" id="uname" name="uname"> <br>
<label>密码:</label>
<input type="password" id="input-pwd"> <br>
<input type="hidden" id="md5-pwd" name="pwd"> <br>
<button type="submit" >提交</button>
</form>
</div>
<script>
function checkForm() {
var uname = document.getElementById('uname').value;
var pwd = document.getElementById('input-pwd').value;
var md5_pwd_elem = document.getElementById('md5-pwd');
md5_pwd_elem.value = md5(pwd);
return true;
}
</script>
</body>
</html>
- 引入bootcdn的md5.min.js文件,用它使用md5算法加密密码文本
- form的属性 onsubmit 用来表单在提交时绑定的事件,这里是checkForm函数,目的是用来验证表单
- id为input-pwd的密码输入框用于接受密码的输入,id为md5-pwd的隐藏域用来真正提交的加密过的密码
- 提交表单上传的数据,对应的文本必须有name属性,用来标示对应的数据项
- 选择的input元素elem可以使用value属性获取表单输入的值,或设置他们的value的值来改变输入的值。但是输入是固定选项的话,则使用checked或selected属性的真与否来判断所选择的值是哪一个。
获取单选框、多选框、下拉框所选定的值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>验证表单</title>
</head>
<body>
<div>
<form action="#" method="post" onsubmit="return checkForm()">
<label>性别</label>
<input type="radio" name="gender" value="male"> 男
<input type="radio" name="gender" value="female"> 女 <br>
<label>爱好</label>
<input type="checkbox" name="hobby" value="movie"> 电影
<input type="checkbox" name="hobby" value="song"> 听歌
<input type="checkbox" name="hobby" value="game"> 游戏 <br>
<label>选择编程语言</label>
<select name="language" id="language">
<option value="C">C</option>
<option value="Java">Java</option>
<option value="JavaScript">JavaScript</option>
</select><br>
<button type="submit">提交</button>
</form>
</div>
<script>
// .. javascript代码位置
function checkForm() {
// ..
return true;
}
</script>
</body>
</html>
判断选项框是否选中
document.getElementById('boy').checked; // 结果: true/false
document.getElementById('girl').checked;
var hobby = document.getElementsByName('hobby');
hobby[0].checked; // 结果:true / false
hobby[1].checked;
hobby[2].checked;
var lang = document.getElementById('language');
var idx = lang.selectedIndex; // 结果: 0 ~ lang.length - 1
lang[idx].selected; // 结果: true / false
jQuery
jQuery 是 javascript 的封装库,旨在减少书写javascript的代码量,能够做更多的事情。更多详情在官网在那里
导入jQuery的方式
方式1:CDN导入
CDN选择很多,这里是使用BootCDN的jQuery。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
</head>
<body>
<div>
</div>
<script>
// .. javascript代码位置
</script>
</body>
</html>
方式2:本地导入
需要到官网下载未压缩的开发用的jQuery,再本地导入到web项目中。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./jquery-3.6.0.js"></script>
</head>
<body>
<div>
</div>
<script>
// .. javascript代码位置
</script>
</body>
</html>
jQuery公式
使用jQuery通常来查找DOM节点,它有一个通用的公式:
$(selector).action(function(){
});
selector指的是选择器,利用CSS选择器的语法来查找DOM节点,action指节点绑定或监听的事件。事件大致分为鼠标事件、键盘事件和其他事件。
jQuery选择器
基本选择器
- #id:根据给定的ID匹配一个元素。
- element:根据给定的元素标签名匹配所有元素。
- .class:根据给定的css类名匹配元素。
- *:匹配所有元素。
- selector1,selector2,selectorN:将每一个选择器匹配到的元素合并后一起返回。可以指定任意多个选择器,并将匹配到的元素合并到一个结果内。
层级选择器
- ancestor descendant:在给定的祖先元素下匹配所有的后代元素
- parent > child:在给定的父元素下匹配所有的子元素
- prev + next:匹配所有紧接在 prev 元素后的 next 元素
- prev ~ sliblings:匹配 prev 元素之后的所有 siblings 元素
基本筛选器
“selector:filter” 代表在selector基础上使用filter筛选元素
filter有如下:
- :first :获取第一个元素
- :last:获取最后个元素
- :not(selector):去除所有与给定选择器匹配的元素
- :even:匹配所有索引值为偶数的元素,从 0 开始计数
- :odd:匹配所有索引值为奇数的元素,从 0 开始计数
- :eq(index):匹配一个给定索引值的元素
- :gt(index):匹配所有大于给定索引值的元素
- :lt(index):匹配所有小于给定索引值的元素
- :header:匹配如 h1, h2, h3之类的标题元素
内容筛选
- :contains(text):匹配包含给定文本的元素
- :empty:匹配所有不包含子元素或者文本的空元素
- :has(selector):匹配含有选择器所匹配的元素的元素
- :parent:匹配含有子元素或者文本的元素
可见性筛选
- :hidden:匹配所有不可见元素,或者type为hidden的元素
- :visible:匹配所有的可见元素
子元素筛选
- :first-child:匹配所给选择器( :之前的选择器)的第一个子元素
- :last-child:匹配最后一个子元素
- :nth-child(n|even|odd):匹配其父元素下的第N个子或奇偶元素
- :nth-last-child(n|even|odd|formula):选择所有他们父元素的第n个子元素。计数从最后一个元素开始到第一个。
- :first-of-type:结构化伪类,匹配E的父元素的第一个E类型的孩子。
- :last-of-type:结构化伪类,匹配E的父元素的最后一个E类型的孩子
- :nth-of-type(n|even|odd|formula):选择同属于一个父元素之下,并且标签名相同的子元素中的第n个。
- :nth-last-of-type(n|even|odd|formula):选择同属于一个父元素之下,并且标签名相同的子元素中的第n个,计数从最后一个元素到第一个。
属性筛选
- [attribute]:匹配包含给定属性的元素。
- [attribute=value]:匹配给定的属性是某个特定值的元素
- [attribute!=value]:匹配所有不含有指定的属性,或者属性不等于特定值的元素。
- [attribute^=value]:匹配给定的属性是以某些值开头的元素
- [attribute$=value]:匹配给定的属性是以某些值结尾的元素
- [attribute*=value]:匹配给定的属性是以包含某些值的元素
表单
- :input:匹配所有 input, textarea, select 和 button 元素
- :text:匹配所有的单行文本框
- :password:匹配所有密码框
- :radio:匹配所有单选按钮
- :checkbox:匹配所有复选框
- :submit:匹配所有提交按钮,理论上只匹配 type=“submit” 的input或者button,但是现在的很多浏览器,button元素默认的type即为submit,所以很多情况下,不设置type的button也会成为筛选结果
- :image:匹配所有图像域
- :reset:匹配所有重置按钮
- :button:匹配所有按钮
- :file:匹配所有文件域
表单对象属性
- :enabled:匹配所有可用元素
- :disabled:匹配所有不可用元素
- :checked:匹配所有选中的radio或checkbox等元素
- :selected:匹配所有选中的option元素
绑定事件
鼠标事件
- mousedown([[data],fn]):当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件。
- mouseup([[data],fn]):当在元素上放松鼠标按钮时,会发生 mouseup 事件。
- mouseenter([[data],fn]):当鼠标指针穿过元素时,会发生 mouseenter 事件。
- mouseleave([[data],fn]):当鼠标指针离开元素时,会发生 mouseleave 事件。
- mousemove([[data],fn]):当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件。
- mouseover([[data],fn]):与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。
- mouseout([[data],fn]):与 mouseleave 事件不同,不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
- scroll([[data],fn]):当用户滚动指定的元素时,会发生 scroll 事件。
键盘事件
- keydown([[data],fn]):当键盘或按钮被按下时,发生 keydown 事件。
- keypress([[data],fn]):与 keydown 事件不同,每插入一个字符,就会发生 keypress 事件。
- keyup([[data],fn]):当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。
其它事件
- blur([[data],fn]):当元素失去焦点时触发 blur 事件。
- change([[data],fn]):当元素的值发生改变时,会发生 change 事件。仅适用于文本域(text field),以及 textarea 和 select 元素。
- click([[data],fn]):点击元素,触发click事件。
- dbclick([[data],fn]):双击元素,触发click事件。
- focus([[data],fn]):当元素获得焦点时,触发 focus 事件。
- focusin([[data],fn]):当元素获得焦点时,触发 focusin 事件。focusin事件跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。
- focusout([[data],fn]):当元素失去焦点时触发 focusout 事件。focusout事件跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况。
- resize([[data],fn]):当调整浏览器窗口的大小时,发生 resize 事件。
- submit([[data],fn]):当提交表单时,会发生 submit 事件。
- select([[data],fn]):当 textarea 或文本类型的 input 元素中的文本被选择时,会发生 select 事件。
- ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
样例:
<script>
$(function(){ // 文档就绪时触发的事件
$(':input').blur();
});
</script>
jQuery操作DOM
更新DOM
$(selector).html(); // 获取超文本内容
$(selector).html('..'); // 设置超文本内容
$(selector).text(); // 获取文本内容
$(selector).text('..'); // 设置文本内容
CSS操作
$(selector).css({key:value});
元素的显示与隐藏
$(selector).hide(); // 隐藏元素
$(selector).show(); // 显示元素
window的宽高
$(window).height();
$(window).width();
ajax异步请求
$.ajax({
type: 'GET', /* GET/POST 请求方式 */
url: 'url', /* 请求地址 */
data: {key:value}, /* 传入的数据 */
dataType: "JSON", /* 接受的数据格式 */
async: true, /* true/false 是否异步 */
success: function(data) { // 请求成功后的响应事件
},
error: function() { // 请求失败后的响应事件
}
});