一、初认JavaScript
1.1 JavaScript基础
JS是支持面向对象编程的跨平台脚本弱类型的语言
面向对象是一种思想
跨平台:ios、Android、windows、Linux
脚本:依赖其他才能解析
弱类型:变量在声明后还可以改变
1.2 JavaScript的组成
DOM:文档对象
BOM:浏览器对象
ECMAScript:规范
js的变量是用来储存数据的容器
1.3 JavaScript的书写位置
1.3.1 内部JS
<body>
<script>
//在此书写代码
</script>
</body>
1.3.2 外部JS
<body>
<script src = "first.js">
//中间不要写内容 (会忽略)
</script>
<body>
1.4 JavaScript的输出方式
| alert() | 浏览器弹窗、用户提示 |
|---|---|
| document.write() | 可在浏览器的显示区域显示文本 |
| console.log() | 控制台日志 |
| confirm() | 提示用户下一步操作 |
| prompt() | 用于提醒用户输入 |
二、JavaScript的基本语法
2.1 数据类型的分类
| number | 数字型 |
|---|---|
| string | 字符串类型(加了引号都是字符串) |
| undefind | 未定义(只声明为赋值) |
| Boolean | 布尔类型 |
| object | 对象(数组、对象、null) |
2.2 数据类型间相互转化的方法
2.2.1 转化为数字类型方法
| Number() | |
|---|---|
| parseInt() | 转为数字类型并取整 |
| parseFloat() | 转化为浮点数保留小数 |
| Math.round() | 小数后一位四舍五入进行取整 |
| .toFixed(3) | 保留三位小数 |
注意
1. 布尔类型转化为数字时:
| Number()和 Math.round() | 会转化为1或者0 |
|---|---|
| parseInt()和parseFloat() | 会显示为NaN (not a number) |
2. 将undefined转化为数字
所有方法都会显示NaN
3. 将null转化为数字
| Number()和 math.round() | 会转化为0 |
|---|---|
| parseInt()和parseFloat() | 会显示NaN |
2.2.2 转化为字符串方法
String()
被转换的数据.tostring()
| undefiend转换为字符串 | .tostring会报错 |
|---|---|
| null转换为字符串 | .tostring会报错 |
2.2.3 转换为布尔类型方法
Boolean()
数字中除了0都是true
字符串中有内容都为true,无内容都为false
undefiend和null都为false
2.3 JavaScript变量声明
let 变量名 //一般用于变量所赋的值会改变的声明
let 变量名 = 值
let name = 'ABC',age = '3'//声明多个变量 可以但是没必要
let name = prompt('请输入姓名')
const 变量名 = 值//一般用于声明常量
let arr = [10,20,30] //声明数组
let data = arr[0]//对数组进行索引
let length = arr.length//获取数组的长度
2.4类型转换
2.4.1 隐式转换
console.log(1+1)
console.log('ABC'+1)//自动把1转为字符型
console.log('2'-2)//除+外会转换为数字型
console.log(+'123')//转为数字型
2.4.2 显示转换
let str= = '123'
let strNum = Number(str)//转为数字型
let num = 123
let intNum = parseInt(num)//保留整数
let floatNum = parseFloat(num)//保留小数
2.5 运算符
== //比较数值大小是否相等
=== //比较左右两边类型和值是否相等
&& //逻辑与
|| //逻辑或
! //逻辑非
三、for-in 、 for-of 、forEach
1. for-in
const obj = {
name: "Alice",
age: 30,
// 添加一个自定义方法
sayHello() { console.log("Hello!") }
};
// 遍历对象的所有可枚举属性(包括原型链上的属性)
for (const key in obj) {
console.log(key); // 输出:name, age, sayHello
}
// ❌ 不推荐用 for-in 遍历数组(可能包含非数字键)
const arr = [10, 20, 30];
arr.customProp = "Oops";
for (const index in arr) {
console.log(index); // 输出:0, 1, 2, customProp(意外遍历到非数字键)
}
2.for-of
// 遍历数组
const arr = [10, 20, 30];
for (const value of arr) {
console.log(value); // 输出:10, 20, 30
}
// 遍历字符串
const str = "Hi";
for (const char of str) {
console.log(char); // 输出:H, i
}
// 遍历 Map
const map = new Map([["a", 1], ["b", 2]]);
for (const [key, value] of map) {
console.log(key, value); // 输出:a 1, b 2
}
// ❌ 普通对象不可用 for-of(需手动实现迭代器)
const obj = { a: 1, b: 2 };
// for (const val of obj) { } // 报错:obj is not iterable
3.forEach
const arr = [10, 20, 30];
// 基本用法:遍历元素值和索引
arr.forEach((value, index) => {
console.log(`索引 ${index} 的值是 ${value}`);
// 输出:
// 索引 0 的值是 10
// 索引 1 的值是 20
// 索引 2 的值是 30
});
// 跳过空位(稀疏数组)
const sparseArr = [1, , 3]; // 中间是空位
sparseArr.forEach((value) => {
console.log(value); // 输出:1, 3(跳过空位)
});
// ❌ 无法中途跳出循环
try {
arr.forEach((value) => {
if (value === 20) throw new Error("Break");
console.log(value); // 输出:10,之后抛出错误
});
} catch (e) {
console.log("强制跳出循环");
}
遍历数组时
1.for-in 输出数组的索引(字符串形式),但会遍历所有可枚举属性(包括非数字键和原型链属性)
不推荐用于数组
2.for-of 输出数组的元素值,直接遍历值且忽略空位(视为 undefined),支持循环控制
3.forEach 输出数组的元素值、索引和数组本身(回调参数:value, index, array)
跳过空位,无法中途跳出循环
遍历对象时
1.for-in 适合遍历普通对象的可枚举属性,需用 hasOwnProperty 过滤原型链属性
2. for-of 只能遍历实现了 Symbol.iterator 接口的对象(如 Array, Map, Set, String 等)
普通对象默认不可用,需手动实现迭代器
3.是数组方法,不能直接用于对象
hasOwnProperty
hasOwnProperty 是 JavaScript 对象的一个内置方法,用于检查某个属性是否是对象自身的属性(而不是从原型链继承的)。它在处理对象属性遍历时非常重要,尤其是在使用 for-in 循环时,可以避免遍历到原型链上的意外属性。
语法:
obj.hasOwnProperty(propertyName)
参数:propertyName(字符串或 Symbol 类型,表示要检查的属性名)
返回值:布尔值(true 表示是对象自身的属性,false 表示是继承的或不存在)
四、数组
1.声明数组
let arr = [10,20,30]
2.使用数组
let arr = [10,20,30]
let data = arr[0] //对数组进行索引
let length = arr.length //获取数组的长度
3.数组的方法
var arr = ['a', 'b', 'c'];
arr["foo"] = "foo";
arr["bar"] = "bar";
3.1查询索引的方法
console.log(arr.indexOf('b')); //1 元素在数组中的位置 找不到返回-1
console.log(arr.lastindexOf('b')); //3 元素在数组中最后出现的位置
3.2检测元素
console.log(arr.includes('e'); //false 判断数组中是否存在此元素
console.log(arr.includes('b'); //true
3.3截取数组的元素
//截取数组的一部分,它有两个参数,分别是截取的起始位置和结束位置(结束位置不包含此数<)
//它返回的是截取出来组成的新数组,原数组不变,其实slice是在赋值
console.log(arr.slice(1,3)); //['b','c']
console.log(arr) //['a', 'b', 'c', 'b']
//还可以利用slice筛取数组元素
let arr = ['a', 'b', 'c'];
arr.foo = "foo";
arr.bar = "bar";
console.log(arr); // [0:"a", 1:"b", 2:"c", foo: "foo", bar: "bar"]
console.log(arr.slice()); // ["a", "b", "c"]
3.4删除数组元素
//它返回的是删除数组的元素,原数组发生改变
// 第二个参数删除元素个数
console.log(arr.splice(1,3); //['b','c','b']
console.log(arr); //['a']
3.5队列方法
var arr = ['a', 'b', 'c', 'd']
//在数组的头部添加元素,返回操作之后数组的长度
console.log(arr.unshift(0)); //5
//原数组发生改变
console.log(arr); //[0, 'a', 'b', 'c', 'd'];
//在数组头部删除元素,返回被删除的元素
console.log(arr.shift()); //0 原数组发生改变
//在数组尾部添加元素,返回操作后数组的长度
console.log(arr.push('e')) //5
console.log(arr); // ['a', 'b', 'c', 'd', 'e'];
//在数组尾部删除元素,返回被删除的元素
console.log(arr.pop()) //e
console.log(arr); //[0, 'a', 'b', 'c', 'd'];
//将数组元素拼接成字符串
var arr = [1,2,3,4,5];
console.log(arr.join("<"); //1<2<3<4<5
//合并数组
var arr2 = [6,7,8,9,10];
console.log(arr.concat(arr2)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3.6总结
| 方法 | 语法示例 | 说明 |
|---|---|---|
| 查询索引 | arr.index0f(ele) | 查询 ele 在数组中初次位置 |
| 查询索引 | arr.lastIndex0f(ele) | 说明査询 ele 在数组中最后位置 |
| 检测元素 | arr.includes(ele) | 检测数组中是否存在 ele 元素 |
| 截取数组 | arr.slice(begin,end) | 截取数组中编号从 begin 到end 之前的元素 |
| 截取数组 | arr.splice(start,n) | 删除数组编号从 start 开始的连续n个元素 |
| 队列方法 | arr.unshift(ele) | 数组头部添加一个 ele 元素,返回新数组长度 |
| 队列方法 | arr.push(ele) | 数组尾部添加一个 ele 元素,返回新数组长度 |
| 队列方法 | arr.shift() | 删除数组第一个元素,返回被删除的元素 |
| 其他方法 | arr.pop() | 删除数组最后一个元素,返回被删除的元素 |
| 其他方法 | arr.join(char) | 将所有数组元素以 char 字符连成字符串 |
| 其他方法 | arr.concat(arr2) | 一个数组合并另一个或多个其他数组 |
3.7字符串方法
创建字符串 - 数组类型
var str = "hello world"; // 字面量
// 创建字符串 - 对象类型
var str = new String("hello world"); // 构造器
console.dir(str);
查看字符串长度
console.log(str.length); //11
通过编号取字符
console.log(str[1]); //e
console.log(str.charAt(1)) //e
由值找索引
console.log(str.indexOf("o"); //4
console.log(str.lastindexOf("o") //7
字符串截取
//不包含第二个位置,如果不传第二个参数,则表示截取到末尾
//第二个参数表示结束位置
console.log(str.slice(6,11)); //world
//第二个参数表示截取的长度
console.log(str.substr(6,5); //world
字符串检测,是否包含某个内容
var gname = "神舟十二号航天员指定太空用奶 伊利 纯牛奶 真正的牛奶"
if (gname.includes("伊利")) {
console.log("显示该商品")
}
检测字符串开头
var name = "#user",
cont = "神舟十二号航天员指定太空用奶 伊利 纯牛奶 真正的牛奶.";
if (name.startsWith("#")) {
console.log("id选择器");
} else if (name.startsWith(".")) {
console.log("类选择器");
}
检测字符串结尾
if (cont.endsWith(".")) {
console.log("一句完整的话")
} else {
console.log("没有结束的话");
}
设置分隔符 分隔元素 组成数组
split("&") //foo=bar&a=1&b=2" 为 [foo=bar,a=1,b=2]
大小写转化
var code = "Xi2d"; // 系统生成的验证码
var user = "xI2d"; // 用户输入的验证码
// 比较的要求是不区分大小写,所以需要统一转化
// toLowerCase(小写) , toLocaleUpperCase(大写)
if (code.toLowerCase() == user.toLowerCase()) {
console.log("输入正确");
} else {
console.log("输入不正确");
}
删除头尾空格
str.trim()
替换字符
str.replace(exp,new) //将exp替换为new exp可为正则
查询字符 可使用正则
str.match(exp); // 找到返回字符 找到返回索引 ,找不到返回-1
合并字符
"hello".concat("world"); // hellowworld
尾部填充
str.padEnd(8,"!"); // 总长度为8位,不够在尾部添加"!"
头部填充
str.padStart(8,"~"); // 总长度为8位,不够在头部添加"~"
字符复制
"a".repeat(4); // aaaa
五、Date 内置日期对象
Date是js内置对象,用来管理时间日期
//首先创造时间对象 Date构造函数 可以有参数
//如果不传参,则表示当前时间对象
var d = new Date ( );
// 快照打印字符串形式的值 相当于 隐式调用d.toString()
//Thu Jun 17 2021 09:36:50 GMT+0800 (中国标准时间)
console.log(d);
//本土格式的日期时间
console.log(d.toLocaleString ( )); // 2025/5/27上午9:39:48
//创建指定日期时间
var d = new Date ("2025-05-26 20:08:08")
var d = new Date (2025,5,26,20,8,8); //分别传入值
// 分别查看某一部分的值,年份,月份,日期,星期,时 分,秒
console.log(d.getFullYear()); // 2025
console.log(d.getMonth()); // 5 范围0-11分别代表12个月份
console.log(d.getDate()); // 26
console.log(d.getDay()); // 1-6 周一到周六 周日是0
console.log(d.getHours()); // 20
console.log(d.getMinutes()); // 8
console.log(d.getSeconds()); // 8
// 返回一个毫秒数 当前时间距离1970年元旦(gmt)相隔的时间
// 该时间 对我们而言 就是用来帮助计算日期差值
console.log(d.getTime()); // 1753841288000 - 时间戳(unix)
// 计算北京奥运会 距今过去多少天
// 2025-05-26 到 2008-08-08 的天数
var d1 = new Date(2008, 7, 8), // 2008-08-08(注意:月份是 0-based,7 表示 8 月)
d2 = new Date(2025, 4, 26); // 2025-05-26(4 表示 5 月)
var unix1 = d1.getTime(),
unix2 = d2.getTime();
var days = (unix2 - unix1) / 1000 / 60 / 60 / 24;
console.log(days); // 输出天数(小数)
// 向上取整(如果希望精确到整天数,可以改用 Math.floor 或直接取整)
var result = Math.ceil(days); // 向上取整
console.log(result); // 4697(如果 d2 是未来日期,会得到正数;如果是过去日期,会得到 0 或负数)
// 如果 d2 是过去日期(比如 2008-08-08 到 2025-05-26),结果会是负数,可以取绝对值
var absoluteDays = Math.abs(Math.ceil(days)); // 确保天数是正数
console.log(absoluteDays); // 如果 d2 > d1,结果是正数;否则是负数
六、Math数学对象
Array、String、Date 实际上是构造函数 都需要new来创建对象,但是Math不需要
//取整数值的方法
var num = 3.14;
//向上取整 取最近的最大值
console.log(Math.ceil(num)) //4
//向下取整 舍掉小数部分
console.log(Math.floor(num)) //3
//四舍五入
var num = 1.5
console.log(Math.round(num)) //2
//取一组最大值和最小值 这里是挨个传参数
console.log(Math.max(1,2,3)) //3
console.log(Math.min(1,2,3)) //1
//在实际使用中,往往是求数组中的最大值
var arr = [1,2,3]
console.log(Math.max(...arr)) //3 借助 ... 展开语句
//取随机数 随机生成一个 0 - 1 之间的数
console.log(Math.random())
//随机生成 1-10
console.log(Math.floor(Math.random() * 10) + 1)
//随机数组中的元素
var arr = ['a', 'b', 'c', 'd'];
var i = Math.floor(Math.radom() * arr.length ))
console.log(arr[i])
//生成N-M之间的随机数
console.log(Math.random()*(M-N+1))+N
| 方法 | 用法示例 | 说明 |
|---|---|---|
| 取整数值 | Math.ceil(number) | 对 number 进位取整 |
| 取整数值 | Math.floor(number) | 对 number 下舍取整 |
| 取整数值 | Math.round(number) | 对 number 四舍五入 |
| 最大最小值 | Math.max(n1,n2,n3) | 求 n1,n2,n3…的最大值 |
| 最大最小值 | Math.min(n1,n2,n3) | 求 n1,n2,n3…的最小值 |
| 生成随机数 | Math.random() | 返回 0-1之间的随机数 |
七、DOM
1.DOM概述
DOM:(Document Object Model)即文档对象模型。是W3C定义的访问文档的标准,他允许程序动态地访问、更新文档的内容、结构和样式
2.元素获取
更改文档内容,首先需要获取元素对象,常见的获取元素的方法有标签,ID,类名等等
2.1 ID获取元素
通过ID获取是最方便的方式之一,但是一次只能获取一个,ID重复时,只获取第一个,对于需要大量获取的不太适用;
document.getElementById('ID')
2.2 标签获取元素
通过标签可以获取指定标签的全部对象,并按照数组形式返回。对于页面结构复杂的,一般很难选中想要的元素,不太常用
document.getElementsByTagName('标签名字')
2.3 类名获取元素
获取指定类名的全部对象,并按照数组形式返回
document.getElementsByClassName('类名')
2.4 选择器获取元素
H5新加入了通过选择器来进行元素获取,实为一大福音
//单个选择
document.querySelector('选择器')
//选取全部
document.querySelectorAll('选择器')
querySelector会选择捕捉到的第一个元素,querySelectorAll会将捕捉到的全部元素按照数组形式返回。注意:选择器要按照css的样式书写,类名前加‘.’,ID前加‘#’
<body>
<div class="father">
<div class="son">
</div>
</div>
<script>
console.log(document.querySelector('.son'))
console.log(document.querySelectorAll('div'))
</script>
</body>
2.5 获取元素Body和HTML
获取Body和HTML元素的方式与以上不同
//获取HTML
document.documentElement
//获取Body
//document.body
3.元素操作
3.1 修改元素内容
获取和修改元素内容我们常用的有两种方式,innerText 和innerHTML。顾名思义,我们能看出来两者的区别在于能否插入标签
innerText:获取或修改元素内的文字,不包含标签和样式
innerHTML:获取或修改元素内所有内容,包括标签和样式
<div>
</div>
<script>
var div = document.querySelector('div');
div.innerText = '<h3>Hello Liyfn<h3>';
</script>
//代码执行后,<h3>被当作字符串打印了
更改为innerHTML
<div>
</div>
<script>
var div = document.querySelector('div');
div.innerHTML = '<h3>Hello Liyfn<h3>';
</script>
总结:当仅仅需要获取或修改元素内容时,我们可以使用innerText,需要修改标签时,我们使用innerHTML
3.2 修改元素属性
我们可以通过js来修改元素自身的属性,包括src,href,disabled…等等
可以使用:元素 + . + 属性的方式
<input type="checkbox" name="" id="">
<a href="#"></a>
<script>
var int = document.querySelector('input');
var a = document.querySelector('a')
//修改标签默认状态为不选中
int.checked = false;
//修改a标签href属性
a.href = 'http://www.baidu.com'
</script>
3.3修改元素样式
操作元素的样式常用的有以下几种方式:
3.3.1 直接修改样式
1.修改字体颜色为红色
var a = document.querySelector('a')
a.style.color = 'red';
2.修改元素显示模式为隐藏
var a = document.querySelector('a')
a.style.display = 'none';
使用.style.属性可以修改元素样式,但是修改的样式是添加在行内样式中,需要注意权重
3.3.2 添加css类名修改样式
对于大量的属性变更我们可以通过修改css类名来实现
1.改变类名(会覆盖原来的类名)
var a = document.querySelector('a')
a.className = 'change'
2.添加类名(不覆盖原来类名)
var a = document.querySelector('a')
a.classList.add('change_2')
3.移除类名
var a = document.querySelector('a')
a.classList.remove('change_2')
4.切换类名(原来有类名就删除,原来没有就添加)
var a = document.querySelector('a')
a.classList.toggle('change_2')
4.添加自定义属性
在js操作元素的时候,我们有时候需要给元素添加自定义属性,来达到我们的目的。比如获取元素是父元素的第几个,就需要给每个子元素打上索引号,再获取对应元素的索引号
1.添加自定义属性
//a元素添加index属性,属性值为2
var a = document.querySelector('a')
a.setAttribute('index', 2)
2.获取自定义属性
var a = document.querySelector('a')
a.setAttribute('index', 2)
//获取索引
var b = a.getAttribute('index')
console.log(b)
3.移除自定义属性
var a = document.querySelector('a')
a.setAttribute('index', 2)
a.removeAttribute('index')
八、事件
1.事件类型
1.1 鼠标事件
| 事件类型 | 语法 | 触发条件 |
|---|---|---|
| 点击事件 | onclick | 鼠标点击触发 |
| 鼠标经过 | onmouseover | 鼠标经过触发 |
| 鼠标离开 | onmouseout | 鼠标离开触发 |
| 获得焦点 | onfocus | 获得鼠标焦点触发 |
| 失去焦点 | onblur | 失去鼠标焦点触发 |
| 鼠标移动 | onmousemove | 鼠标移动触发 |
| 鼠标弹起 | onmouseup | 鼠标弹起触发 |
| 鼠标按下 | onmousedown | 鼠标按下触发 |
| 禁用右键菜单 | contextmenu | |
| 禁止选中文字 | selectstart |
1.2 键盘事件
| 事件类型 | 语法 | 触发条件 |
|---|---|---|
| 键盘弹起 | onkeyup | 某个键盘按键被松开时触发 |
| 键盘按下 | onkeydown | 某个键盘按键被按下时触发 |
| 键盘按下 | onkeypress | 某个键盘被按下时触发 |
2.事件绑定
2.1 传统方式绑定
//执行后打印123
var a = document.querySelector('a')
a.onclick = function () {
console.log(123)
}
2.2 添加事件监听
添加事件监听不需要加on,需要注意
var a = document.querySelector('a')
a.addEventListener('click', function () {
console.log(123)
})
2.3 事件解绑
传统方式解绑
a.onclick = function () {
console.log(123)
}
a.onclick = null;
监听方式解绑
var a = document.querySelector('a')
function _a() {
console.log(123)
}
a.addEventListener('click', _a)
a.removeEventListener('click', _a)
2.4 二者区别
传统方式绑定只能绑定一个事件,后来的事件会把前面的重叠掉
添加监听可以一次绑定多个事件
3.事件对象
3.1 什么是事件对象
事件对象是JS内置的一个对象,他包含了事件触发后一系列数据的集合,比如点击位置,点击对象等等
他是事件函数的一个参数,我们可以用传参把参数打印出来
3.2 常用鼠标事件对象
| 鼠标事件对象 | 说明 |
|---|---|
| e. clientX | 返回鼠标相对于浏览器可视窗口的X坐标 |
| e.clientY | 返回鼠标相对于浏览器可视窗口的Y坐标 |
| e.pageX | 返回鼠标相对于文档页面的X坐标 |
| e.pageY | 返回鼠标相对于文档页面的Y坐标 |
| e.screenX | 返回鼠标相对于电脑屏幕的X坐标 |
| e.screenY | 返回鼠标相对于电脑屏幕的Y坐标 |
3.3 常用键盘事件对象
键盘事件最常用的就是判断按键值
| 鼠标事件对象 | 说明 |
|---|---|
| e.keyCode | 返回该键的ASCII码值 |
3.4 其他
| 事件对象属性方法 | 说明 |
|---|---|
| e.target | 返回触发事件的对象 |
| e.type | 返回事件的类型,如:click mouseove |
| e.preventDefault() | 该方法阻止默认行为,如:不让链接跳转 |
| e.stopPropagation() | 阻止冒泡 |
九、节点操作
1.节点定义
页面中所有的内容都是节点,包括元素,属性,文本,注释甚至空格和换行;当然,我们大部分的操作都是针对元素节点的
2.节点属性
2.1 节点类型
| 节点类型 | nodetype |
|---|---|
| 元素节点 | 1 |
| 文本节点 | 3 |
| 注释节点 | 8 |
| document | 9 |
2.2 节点名称
标签名的大写
2.3 节点值
节点的value值
<a href="#">123</a>
<script>
var a = document.querySelector('a')
a.onclick = function (e) {
//节点类型
console.log(this.nodeType) //节点类型:1
console.log(this.nodeName) //节点名称:A
console.log(this.nodeValue) //节点值
</script>
3.节点获取
| 父节点 | 子元素. parentNode | 找更高层级的父级可以继续添加.parentNode |
|---|---|---|
| 子节点 | 父元素.children | 找精确的:父元素.children[索引号] |
| 兄弟节点 | div.nextElementSibling | 当前元素下一个兄弟元素节点 |
| 兄弟节点 | div.previousElementSibling | 当前元素上一个兄弟元素节点 |
<div class="father">
<div class="sib"></div>
<div class="son">
<span>1</span><span>2</span><span>3</span><span>4</span>
</div>
<div class="sib2"></div>
</div>
<script>
var div = document.querySelector('.son')
console.log(div.parentNode) //div class = father
console.log(div.children) //span数组
console.log(div.nextElementSibling) //sib2
console.log(div.previousElementSibling) //sib
</script>
十、BOM
1.BOM概述
BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。
BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性
BOM缺乏标准,JS语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分
2.BOM与DOM的区别
| BOM | DOM |
|---|---|
| 浏览器对象模型 | 文档对象模型 |
| 把浏览器当做一个对象来看待 | DOM是把文档当做一个对象来看待 |
| 顶级对象是window | 顶级对象是document |
| 学习浏览器窗口交互的一些对象 | 主要学习操作页面元素 |
| 各浏览器厂商在各自浏览器上定义的标准,兼容性较差 | W3C标准规范 |
3.BOM的构成(对象)
window对象: 当前页面窗口对象
navigator对象: 记录浏览器特性(版本、厂商、内核、产品名等)
screen对象: 查看客户机屏幕信息
history对象: 访问浏览器历史记录
location对象: 操作当前页面地址栏
3.1 Window (操作属性)
3.1.1 对话框
alert(提示框)
alert()是在浏览器弹出一个提示框
-
这个弹出层只是一个提示内容,只有一个确定按钮
-
点击这个确定按钮以后,这个提示框就消失了
window.alert("我是一个提示框");
confirm(询问框)
confirm()是在浏览器弹出一个询问框
-
这个弹出层有一个询问信息和两个按钮
-
当你点击确认的时候,就会得到 true
-
当你点击取消的时候,就会得到 false
var boo = window.confirm("我是一个询问框"); console.log(boo);
prompt(输入框)
prompt()是在浏览器弹出一个输入框
-
这个弹出层有一个输入框和两个按钮
-
但你点击取消的时候,得到的是null
-
当你点击确认的时候得到的就是你输入的内容
var str = window.prompt("请输入内容"); console.log(str);
3.1.2 定时器
setTimeout(延时)
倒计时多少时间以后执行函数
语法:setTimeout(要执行的函数,多少时间以后执行);
会在你设定的时间以后执行函数
var timerId = setTimeout(function (){
console.log('我执行了');
},1000);
console.log(timerId) // 1
- 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
- 所以会在页面打开 1 秒钟以后执行函数
- 只执行一次,就不在执行了
- 返回值是,当前这个定时器是页面中的第几个定时器
关闭定时器
我们刚才提到过一个 timerId,是表示这个定时器是页面上的第几个定时器
这个 timerId 就是用来关闭定时器的数字
我们有个方法来关闭定时器 clearTimeout
关闭以后定时器就不会在执行了
var timerId = setTimeout(function(){
console.log("倒计时定时器");
},1000);
clearTimeout(timerId); // 关闭倒计时定时器
原则上是clearTimeout关闭setTimeout,但是其实是可以通用的
var timerId = setTimeout(function(){
console.log('倒计时定时器');
},1000);
// 关闭倒计时定时器
clearInterval(timerId);
定时器的返回值
设置定时器的时候,他的返回值是部分 setTimeout 和 setInterval 的
只要有一个定时器,那么就是一个数字
var timerId = setTimeout(function(){
console.log('倒计时定时器');
},1000);
var timerId2 = setInterval(function(){
console.log("间隔定时器");
},1000);
console.log(timerId) // 1
console.log(timerId2) // 2
setInterval(间隔)
每隔多少时间执行一次函数
语法:setInterval(要执行的函数,间隔多少时间);
会在你设定的时间以后执行函数
var timerId = setInterval(function (){
console.log('我执行了');
},1000);
- 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
- 每间隔 1 秒钟执行一次函数
- 只要不关闭,会一直执行
- 返回值是,当前这个定时器是页面中的第几个定时器
关闭定时器
我们刚才提到过一个 timerId,是表示这个定时器是页面上的第几个定时器
这个 timerId 就是用来关闭定时器的数字
我们有个方法来关闭定时器 clearInterval
关闭以后定时器就不会在执行了
var timerId = setInterval(function(){
console.log("间隔定时器");
},1000);
clearInterval(timerId); // 关闭间隔定时器
原则上是clearInterval关闭setInterval,但是其实是可以通用的
var timerId = setInterval(function(){
console.log('间隔定时器');
},1000);
// 关闭间隔定时器
clearTimeout(timerId);
定时器的返回值
设置定时器的时候,他的返回值是部分 setTimeout 和 setInterval 的
只要有一个定时器,那么就是一个数字
var timerId = setTimeout(function(){
console.log('倒计时定时器');
},1000);
var timerId2 = setInterval(function(){
console.log("间隔定时器");
},1000);
console.log(timerId) // 1
console.log(timerId2) // 2
3.1.3 开关窗口
open(打开)
打开一个网址
// 如果strUrl 是一个空值,那么打开的窗口将会是带有默认工具栏的空白窗口
window.open()
// 新窗口打开百度
window.open("https://www.baidu.com/","_blank")
close(关闭)
关闭当前窗口
window.close() // 关闭
3.2 Window(界面属性)
窗口:指的是浏览器窗口
视口:指的是浏览器窗口中页面视口(不包含浏览器边框和工具栏)
屏幕:指的是电脑屏幕
3.2.1 窗口与屏幕的位置
距离:screenLeft(左侧)screenTop(顶部)
screenLeft:表示窗口相对于屏幕左侧的位置,返回值的单位是像素值
screenTop:表示窗口相对于屏幕顶部的位置,返回值的单位是像素值
console.log("screenLeft 位置:", window.screenLeft);
console.log("screenTop 位置:", window.screenTop);
定位:moveTo(绝对)moveBy(相对)
moveTo:接收要移动到的新位置的绝对坐标 x和y
moveBy:接收相对当前位置在两个方向上移动的像素值
// 把窗口移动到左上角
window.moveTo(0,0)
// 把窗口移动到坐标位置(200,300)
window.moveTo(200,300)
// 把窗口向下移动100像素
window.moveBy(0,100)
// 把窗口向左移动10像素
window.moveBy(-10,0)
3.2.2 窗口与视口的大小
视口:innerHeight(高度)innerWidth(宽度)
返回浏览器窗口中页面视口大小(不包含浏览器边框和工具栏)
console.log("innerWidth 宽度:",window.innerWidth);
// innerWidth 宽度: 1002
console.log("innerHeight 高度:",window.innerHeight);
// innerHeight 高度: 907
窗口:outerHeight(高度)outerWidth(宽度)
返回浏览器自身窗口的大小
console.log("outerWidth 宽度:",window.outerWidth);
// outerWidth 宽度: 1680
console.log("outerHeight 高度:",window.outerHeight);
// outerHeight 高度: 1010
3.2.3 视口与滚动的关系
距离:scrollX(向右)scrllY(向下)
scrollX:文档向右滚动的距离,当窗口无法展示整个页面,这时候就需要滚动查看
scrollY:文档向下滚动的距离,当窗口无法展示整个页面,这时候就需要滚动查看
console.log("scrollX 向右滚动了多少距离:",window.scrollX);
// scrollX 向右滚动了多少距离: 0
console.log("scrollY 向下滚动了多少距离:",window.scrollY);
// scrollY 向下滚动了多少距离: 0
定位:scrollTo(绝对)scrollBy(相对)
这两个方法接收x和y坐标,表示要滚动到的位置
// 滚动到页面左上角
window.scrollTo(0,0)
// 滚动到页面左边100像素和顶部200像素的位置
window.scrollTo(100,200)
// 相对于当前视口向下滚动100像素
window.scrollBy(0,100)
// 相对于当前视口向右滚动40像素
window.scrollBy(40,0)
十一、正则表达式
专门用来检测字符串是否符合规则
1.创建正则表达式
字面量创建
let reg = /abcdefg/
构造函数创建
let reg = new RegExp('abcdefg')
console.log(reg)
字面量和构造函数区别
let ch = "o";
//字面量表达式 只支持硬编码的字符 变量名不解析
const reg = /ch/gi;
console.log(reg); // /ch/gi
//通过正则对象设置
const reg = new RegExp(ch,"gi");
console.log(reg); // /o/gi
元字符
. : 匹配非换行的任意字符
\ : 转译符号,把有意义的 符号 转换成没有意义的 字符,把没有意义的 字符 转换成有意义的 符号
\s : 匹配空白字符(空格/制表符/…)
\S : 匹配非空白字符
\d : 匹配数字
\D : 匹配非数字
\w : 匹配数字字母下划线
\W : 匹配非数字字母下划线
限定符
* :前一个内容重复至少 0 次,也就是可以出现 0 ~ 正无穷 次
+ : 前一个内容重复至少 1 次,也就是可以出现 1 ~ 正无穷 次
? : 前一个内容重复 0 或者 1 次,也就是可以出现 0 ~ 1 次
{n} : 前一个内容重复 n 次,也就是必须出现 n 次
{n, } : 前一个内容至少出现 n 次,也就是出现 n ~ 正无穷 次
{n,m} : 前一个内容至少出现 n 次至多出现 m 次,也就是出现 n ~ m 次
边界符
^ : 表示开头
$ : 表示结尾
特殊符号
() : 限定一组元素
[] : 字符集合,表示写在 [] 里面的任意一个都行
[^] : 反字符集合,表示写在 [^] 里面之外的任意一个都行
- : 范围,比如 a-z 表示从字母 a 到字母 z 都可以
| : 或,正则里面的或 a|b 表示字母 a 或者 b 都可以
标识符
i : 表示忽略大小写
这个 i 是写在正则的最后面的
/\w/i
就是在正则匹配的时候不去区分大小写
g : 表示全局匹配
这个 g 是写在正则的最后面的
/\w/g
就是全局匹配字母数字下划线
正则表达式方法
test
用来检测字符串是否符合我们正则的标准
语法:正则.test(字符串) 返回boolean
console.log(/\d+/.test('123')) //true
exec
把字符串中符合条件的内容捕获出来
语法:正则.exec(字符串) 返回符合要求的,以数组形式返回
let reg = /\d{3}/;
let str = "hello123worder456你好789";
let res = reg.exec(str);
console.log(res); //123
使用正则的字符串方法
字符串中有一些方法是可以和正则一起使用的
search
search是查找字符串中是否有满足正则条件的内容
语法:字符串.search(正则) 找得到返回索引,找不到返回-1
let reg = /\d{3}/;
let str = "hello123";
let str2 = "hello";
console.log(str.search(reg)) // 5
console.log(str2.search(reg)) //-1
match
match找到字符串中符合条件的返回内容
语法:字符串.math(正则) 找到返回内容
没有标识符 g 的时候,是和exec方法一样
有标识符 g 的时候,是返回一个数组,里面是匹配的每一项
let reg = /\d{3}/;
let str = "hello123world456";
let str2 = 'hello';
console.log(str.match(reg));// ["123", index: 5, input: "hello123wor456", groups: undefined]
console.log(str2.match(reg));// null
replace
replace是将字符串满足正则条件的字符串替换掉
语法:字符串.replace(正则,要替换的字符串)返回替换后的字符串
let reg = /\d{3}/g;
let str = 'hello123world456';
console.log(str.replace(reg,'666')); //hello666world666
十二、Ajax
1.Ajax概述
Ajax:Asynchronous JavaScript And XML,异步JavaScript和XML技术
描述:不是一门新的语言或技术是由JavaScript、XML、DOM、CSS等多种已有技术组合而成的一种浏览器端技术
功能:用于实现与服务器进行异步交互的功能。用js来实现页面的局部刷新
2.前后端交互-Ajax
创建Ajax对象
<script>
//W3C标准
var xhr = new XMLHttpRequest();
</script>
<script>
//早期IE浏览器
var xhr = new ActiveXObject('Microsoft.XMLHTTP');
var xhr = new ActiveXObject('Msxml2.XMLHTTP');
var xhr = new ActiveXObject('Msxml2.XMLHTTP.3.0');
var xhr = new ActiveXObject('Msxml2.XMLHTTP.5.0');
var xhr = new ActiveXObject('Msxml2.XMLHTTP.6.0');
</script>
Ajax向服务器发送请求
open(‘method’, ‘URL’ [, asyncFlag [, ‘userName’ [, ‘password’]]])
method:用于指定请求方式,如GET、POST,不区分大小写
URL:表示请求的地址
asyncFlag:可选参数,用于指定请求方式,同步请求为false,默认为异步请求true
userName和password:可选参数,表示HTTP认证的用户名和密码
send(content)
content:用于指定要发送的数据,其值可为DOM对象的实例、输入流或字符串,一般与POST请求类型配合使用
注意:如果请求声明为同步,该方法将会等待请求完成或者超时才会返回,否则此方法将立即返回
setRequestHeader(‘haeder’, ‘value’)
参数都为字符串类型
header表示请求头字段
value为该字段的值
此方法必须在open()方法后调用
<script>
// 1、创建ajax对象
var xhr = new XMLHttpRequest();
// 2、建立http请求
xhr.open('GET','test.php?a=1&b=2');
// 3、发送请求到web服务器并接收响应
xhr.send();
</script>
<!-- get:适合从服务器获取数据 -->
<script>
// 1、创建ajax对象
var xhr = new XMLHttpRequest();
// 2、建立http请求
xhr.open('POST','test.php?a=1&b=2');
// 3、请求头内指定实体内容的编码格式
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
// 4、发送请求到web服务器并接收响应
xhr.send('c=3&d=4');
</script>
<!-- POST:适合向服务器发生数据 -->
在进行Ajax开发时,经常使用GET方式或POST方式发送请求
GET方式适合从服务器获取数据
POST方式适合向服务器发送数据。需要设置内容的编码格式,告知服务器用什么样的格式来解析数据
注意:
同步请求与异步请求
Ajax对象open()方法的第3个参数用于设置同步请求和异步请求
两种方式的区别在于,是否阻塞代码的执行
异步方式(默认):是非阻塞的,浏览器端的JavaScript程序不用等待Web服务器响应,可以继续处理其他事情。当服务器响应后,再来处理Ajax对象获取到的响应结果
同步方式:是阻塞的,当Ajax对象向Web服务器发送请求后,会等待Web服务器响应的数据接收完成,再继续执行后面的代码
处理服务器返回的信息
readyState属性用于获取Ajax的当前状态,状态值有5种形式
| 状态值 | 说明 | 解释 |
|---|---|---|
| 0 | 未发送 | 对象已创建,尚未调用ope()方法 |
| 1 | 已打开 | open()方法已调用,此时可以调用send()方法发起请求 |
| 2 | 收到响应头 | send()方法已调用,响应头也已经被接收 |
| 3 | 数据接收中 | 响应体部分正在被接收,responseText将会在载入的过程中拥有部分响应数据 |
| 4 | 完成 | 数据接收完毕,此时可以通过responseText获取完整的响应 |
Ajax状态的还可以通过“XMLHttpRequest.属性名”的方式获取
<script>
XMLHttpRequest.UNSENT; // 对应状态值0
XMLHttpRequest.OPENED; // 对应状态值1
XMLHttpRequest.HEADERS_RECEIVED; // 对应状态值2
XMLHttpRequest.LOADING; // 对应状态值3
XMLHttpRequest.DONE; // 对应状态值4
</script>
onreadystatechange事件属性用于感知readyState属性状态的改变,每当readyState的值发生改变时,就会调用此事件
<script>
// 1、创建ajax对象
var xhr = new XMLHttpRequest()
console.log(xhr.readyState)//0
xhr.onreadystatechange = function(){
console.log(xhr.readyState)//1,2,3,4
}
xhr.open('get','test.php')
xhr.send()
</script>
status属性用于返回当前请求的HTTP状态码,值为数值类型
例如,当请求成功时,状态码为200
另外还有一个类似的属性statusText,值为字符型数据,包含了描述短语,如“200 OK”
获取服务器的响应信息
| 属性名 | 说明 |
|---|---|
| responseText | 将响应信息作为字符串返回 |
| responseXML | 将响应信息格式化为XML Document对象并返回(只读) |
responseXML属性在请求失败或相应内容无法解析时的值为null
需要注意的是,服务器在返回XML时应设置响应头Content-Type的值为text/xml或application/xml,否则会解析失败
<script>
// 1、创建对象
var xhr = new XMLHttpRequest();
// 2、事件属性
xhr.onreadystatechange = function(){
// xhr.readyState 获取状态值 1,2,3,4
if(xhr.readyState === XMLHttpRequest.DONE){
// status 响应状态码
if(xhr.status<200 || xhr.status>=300 && xhr.status !== 304){
alert('服务器异常');
return;
}
// xhr.responseText //Hello
console.log(xhr.responseText)
document.write('<h2>'+xhr.responseText+'</h2>')
}
}
xhr.open('get','hello.php')
xhr.send()
</script>
3.前后端交互-数据格式
前后端约定一种格式,确保通信双方都能够正确识别对方发送的信息
XML
XML:eXtensible Markup Language,可扩展标记语言
与HTML都是标签语言,XML主要用于描述和存储数据,可以自定义标签
当服务器返回的是一个XML格式的数据时,利用Ajax对象的responseXML属性即可对XML数据进行处理
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState === XMLHttpRequest.DONE){
var data = xhr.responseXML;
var booklist = data.getElementsByTagName('booklist')[0];//<booklist>...</booklist>
console.log(booklist.childNodes)//[text\book\text]
console.log(booklist.children)//[book]
var book = booklist.children[0]//<book>...</book>
console.log(book.children)//[name,author]
console.log(book.children[0].innerHTML)//西游记
console.log(book.children[0].firstChild)// '西游记'
console.log(book.children[0].firstChild.wholeText)//西游记
}
}
xhr.open('get','xml.php')
xhr.send()
</script>
JSON
JSON:是一种轻量级的数据交换格式
特点:采用完全独立于语言的文本格式,这使得JSON更易于程序的解析和处理
与XML对比:使用JSON对象访问属性的方式获取数据更加方便,在JavaScript中可以轻松地在JSON字符串与对象之间转换
<script>
var obj = {name:'Tom',age:21} //准备要发生的数据
var json = JSON.stringify(obj)//将obj对象转换为json字符串
var xhr = new XMLHttpRequest();//创建ajax对象
xhr.open('post','json.php');//建立连接
xhr.onreadystatechange = function(){
if(xhr.readyState === XMLHttpRequest.DONE){
console.log(typeof xhr.responseText)//查看服务器返回的数据类型:string
var obj = JSON.parse(xhr.responseText)//将json字符串转换为对象
console.log(obj)
// eval() 将传入的字符串当js代码执行
eval("var obj="+xhr.responseText)//用eval函数将字符型转换为对象
console.log(obj.name)
console.log(obj.age)
}
}
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
xhr.send('json='+encodeURIComponent(json))//发送请求
</script>
4.前后端交互-跨域请求
域(Domain)是指网络中独立运行的单位
从网络安全角度来看,域是安全的边界,每个域都有自己的安全策略,不同域之间是隔离的,除非建立信任关系,否则无法互相访问。
什么是跨域:未遵循同源策略,同源是指请求URL地址中的协议、域名和端口都相同
跨域请求会导致网页失去安全性,因此浏览器阻止跨域请求
Access-Control-Allow-Origin响应头
解决办法之一:为使受信任的网站之间能够跨域访问,HTML5提供了一个新的策略,就是Access-Control-Allow-Origin响应头
目标服务器通过该响应头可以指定允许来自特定URL的跨域请求,其值可以设置为任意URL或特定URL等
十三、Jquery
1.Dom对象与Jquery包装集对象
1.1 Dom对象
javascript 中获取 Dom 对象,Dom 对象只有有限的属性和方法
var div = document.getElementById("testDiv");
var divs =document.getElementsByTagName("div");
1.2 Jquery包装集对象
可以说是 Dom 对象的扩充.在 jQuery 的世界中将所有的对象,无论是一个还是一组,都封装成一个jQuery 包装集,比如获取包含一个元素的 jQuery 包装集:
var jQueryObject = $("#testDiv")
获取Jquery对象的两种方式
// 第一种方式 获取jquery对象
var jqueryDiv = jquery('#mydiv');
// 第二种方式 获取jquery对象
jqueryDiv = $('#mydiv');
1.3 Dom对象转为Jquery对象
Dom对象转为jQuery对象,只需要利用$()方法进行包装即可
var domDiv = document.getElementById('mydiv'); //获取Dom对象
mydiv = $(domDiv);
1.4 Jquery对象转为Dom对象
jQuery对象转Dom对象,只需要取数组中的元素即可
var jqueryDiv = jquery('#mydiv');
// 将以获取的jquery对象转为dom
var dom = jqueryDiv[0];
通过遍历jQuery对象数组得到的对象是Dom对象,可以通过$()转为jQuery对象
$('#mydiv').each(function(){
var jquery = $(this);
});
2.Jquery选择器
2.1 基础选择器
| 选择器 | 名称 | 举例 |
|---|---|---|
| id选择器 | #id | $(“#testDiv”)选择id为testDiv的元素 |
| 元素名称选择器 | element | $(“div”)选择所有div元素 |
| 类选择器 | .class | $(“.blue”)选择所有class=blue的元 |
| 通用选择器 | * | $(“*”)选择页面所有元素 |
| 组合选择器 | selector1,selector2,selectorN | $(“#testDiv,span,.blue”)同时选中多个选择器匹配的元素 |
2.2 层次选择器
| 选择器 | 名称 | 举例 |
|---|---|---|
| 后代选择器 | ancestor descendant | $(“#parent div”)选择id为parent的元素的所有div元素 |
| 子代选择器 | parent > child | $(“#parent > div”)选择id为parent的直接div子元素 |
| 相邻选择器 | prev + next | $(“.blue + img”)选择css类为blue的下一个img元素 |
| 同辈选择器 | prev~ sibling | $(“.blue ~ img”)选择css类为blue的之后的img元素 |
2.3 表单选择器
| Forms | 名称 | 举例 |
|---|---|---|
| 表单选择器 | :input | 查找所有的input元素:$(“:input”); 注意:会匹配所有的input、textarea、select和button元素 |
| 文本框选择器 | :text | 查找所有文本框:$(“:text”) |
| 密码框选择器 | :password | 查找所有密码框:$(“:password”) |
| 单选按钮选择器 | :radio | 查找所有单选按钮:$(“:radio”) |
| 复选框选择器 | :checkbox | 查找所有复选框:$(“:checkbox”) |
| 提交按钮选择器 | :submit | 查找所有提交按钮:$(“:submit") |
| 图像域选择器 | :image | 查找所有图像域:$(“:image”) |
| 重置按钮选择器 | :reset | 查找所有重置按钮:$(“:reset") |
| 按钮选择器 | :button | 查找所有按钮:$(“:button”) |
| 文件域选择器 | :file | 查找所有文件域:$(“:file”) |
3. Jquery Dom操作
1.操作元素属性
1.1 获取属性
attr(“属性名”)
prop(“属性名”)
1.2 设置属性
attr(“属性名”,“属性值”)
prop(“属性名”,“属性值”)
1.3 移除属性
removeAttr(“属性名”)
属性的分类:
**固有属性:**元素本身就有的属性(id、name、class、style)
返回值为boolean的属性:checked、selected、disabled等
**自定义属性:**用户自己定义的属性
attr()和prop()的区别:
固有属性:**attr()和prop()**方法均可操作
返回值为boolean的属性:
若设置了属性,attr()返回具体的值,prop()返回true
若未设置属性,attr()返回undefined,prop()返回false
自定义属性:**attr()**可操作,**prop()**不可操作
总结:
如果属性的类型是boolean,则使用prop()方法; 否则使用attr()方法
2.操作元素样式
| 方法 | 说明 |
|---|---|
| attr(“class”) | 获取class属性的值,即样式名称 |
| attr(“class",“样式名”) | 修改class属性的值,修改样式 |
| addClass(“样式名”) | 添加样式名称 |
| css() | 添加具体的样式 |
| removeClass(class) | 移除样式名称 |
css():
// css({'样式名1’:’样式值1’,样式名2’:'样式值2’})
css({"background-color" :"red" ,"color" :"#fff"});
// css(“样式名”,”样式值”)
css('color','white')
3.操作元素内容
| 方法 | 说明 |
|---|---|
| html() | 获取元素的内容,包含html标签(非表单元素) |
| html("html,内容”) | 设置元素的内容,包含html标签(非表单元素) |
| text() | 获取元素的纯文本内容,不包含html标签(非表单元素) |
| text("text 内容”) | 设置元素的纯文本内容,不包含html标签(非表单元素) |
| val() | 获取元素value值(表单元素) |
| val('值’) | 设置元素的value值(表单元素) |
4.添加元素
| 方法 | 说明 |
|---|---|
| prepend(content) | 在被选元素内部的开头插入元素或内容,被追加的 content 参数,可以是字符、HTML 元素标记 |
| $(content).prependTo(selector) | 把 content 元素或内容加入 selector 元素开头 |
| append(cöntent) | 在被选元素内部的结尾插入元素或内容,被追加的content 参数,可以是字符、HTML元素标记 |
| $(content).appendTo(selector) | 把 content元素或内容插入selector 元素内,默认是在尾部 |
| before() | 在元素前插入指定的元素或内容:$(selector).before(content) |
| after() | 在元素后插入指定的元素或内容:$(selector).after(content) |
prepend,prependTo,append,appendTo是追加子元素
before,after是追加同级元素
5.删除元素
| 方法 | 说明 |
|---|---|
| remove() | 删除所选元素或指定的子元素,包括整个标签和内容一起删 |
| empty() | 清空所选元素的内容,保留标签 |
6.遍历元素
each() $(selector).each(function(index,element))
function 为遍历时的回调函数
index 为遍历元素的序列号,从0开始
element是当前的元素,此时是dom元素
4.Jquery事件
4.1 ready()加载事件
ready()类似于 onLoad()事件
ready()可以写多个,按顺序执行
KaTeX parse error: Expected 'EOF', got '}' at position 28: …eady(function()}̲)等价于(function(){})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ready加载事件</title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"> </script>
<script type="text/javascript">
$(document).ready(function(){
// 获取元素
console.log($('#p1'));
});
// 简写
$(function(){
console.log($('#p1'));
});
</script>
</head>
<body>
<p id="p1">文本</p>
</body>
</html>
4.2 bind()绑定事件
为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数
$(selector).bind( eventType [,eventData], handler(eventobject));
eventType:是一个字符串类型的事件类型,就是你所需要绑定的事件,
这类类型可以包括如下:
blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick,
mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter,
mouseleave,change, select, submit, keydown, keypress, keyup, error
[,eventData] 传递的参数,格式:{名:值,名2:值2}
handler(eventObject):该事件触发执行的函数
绑定单个事件:
// bind()绑定
$("#test").bind("click",function(){
console.log("世上无难事,只怕有心人");
});
// 直接绑定
$("#btntest").click(function(){
$(this).prop("disabled",true);
});
绑定多个事件:
//1.同时为多个事件绑定同一个函数
$("#btn1").bind("click mouseout",function(){
console.log("按钮1...”);
});
//2.为元素绑定多个事件,并设置对应的函数
$("#btn2").bind("click",function(){
console.log("按钮2被点击了...”);
}).bind("mouseout",function(){
console.log("按钮2移开了...");
});
//3.为元素绑定多个事件,并设置对应的函数
$("#btn3").bind({
"click":function(){
console.log("按钮3被点击了...”);
}
"mouseout":function(){
console.log("按钮3移开了...“);
}
});
// 直接绑定
$("#btn4").click(function(){
console.log("按钮4被点击了...”);
}).mouseout(function(){
console.log("按钮4移开了...");
});
5. Jquery Ajax
5.1 $.ajax
jquery调用ajax方法:
格式:$.ajax({}):
参数:
type:请求方式GET/POST
url:请求地址url
async:是否异步,默认是true表示异步
data:发送到服务器的数据
dataType:预期服务器返回的数据类型
contentType:设置请求头
success:请求成功时调用此函数
error:请求失败时调用此函数
5.2 $.get 和 $.post
这是一个简单的 GET 和 POST 请求功能以取代复杂 $.ajax
请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax
$.get("js/data.json",{},function(data){
console.log(data);
});
$.post("js/data.json",{},function(data){
console.log(data);
});
5.3 $.getJSON
表示请求返回的数据类型是JSON格式的ajax请求
$.getJsoN("js/data.json",{name:"tom",age:100},function(data){
console.1og(data);//要求返回的数据格式是JSON格式
});
如果返回的数据不是json格式的,则无法获取

5107

被折叠的 条评论
为什么被折叠?



