diff --git "a/\351\231\210\346\226\271\346\227\255/20251110-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251110-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..eb1198d395fda8f7549d6ea02c98c55285a78645 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251110-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,11 @@ +## 笔记部分 +### JS的三种引入方式 + +- 行内嵌入 + +- 内部嵌入 + +- 外部嵌入 + + + diff --git "a/\351\231\210\346\226\271\346\227\255/20251112-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251112-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..3724d48ecb89970b33b8dad8f04df2cc3245b479 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251112-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,36 @@ +## 笔记部分 +### 练习部分 + +1. + +```html +

个人信息

+ +``` + +2. + +```html + +``` + + + diff --git "a/\351\231\210\346\226\271\346\227\255/20251113-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251113-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..ca369d1e46de1236d6008f7a3a849e23f4a08d9d --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251113-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,110 @@ +## 笔记部分 +### 一、JS运算符 +#### 逻辑运算符 +- 逻辑与(&&): 【11=1】、【10=0】、【00=0】 +- 逻辑非(!):【1==0=1】、【1==1=0】 +- 逻辑或(||):【10=1】、【01=1】、【11=1】、【00=0】 +#### 其他运算符 +- 逗号运算符:逗号运算符用于将多个表达式排在一起,整个表达式的值是最后一个表达式的值 + +例: +```js +var a,b,c,d +a(b=1,c=2,d=3) +alert(a) + +输出结果:3 +``` +- typeof运算符:用于判断操作数的数据类型,结果返回一个字符串,此字符串代表了操作数的数据类型 + +例: +```js +var a,b,c,d +a=3 //数值 +b="字符串类型"//字符串 +c=false //布尔值 +d=null//空值 +alert(a) +输出结果:number +``` +- new运算符:创建一个新的实例对象 +### 二、表达式 +#### 表达式转换 +1、其他数据类型转数值 + - undefined:NAN + - null:0 + - 逻辑型:若值为true,结果为1;反之为0 + - 字符串:如果字符串是数字则直接转换为数字,否则为NaN + -其他对象:NaN + +2、其他数据类型转逻辑 + - undefined:false + - null:false + - 逻辑型:若值为0或NaN,结果为false;反之为true + - 字符串:若其长度为0,则结果为false,否则为true + -其他对象:true + +3、其他数据类型转字符串 + - undefined:直接转换 + - null:直接转换 + - 逻辑型:若其值为ture,则是"ture",反之亦然 + - 数值:NaN、0、与数值相对应的字符串 + - 其他对象:若存在,则其结果为toString()方法的值;否则其他结果为"undfined" + +### 练习部分 + +``` + +``` \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251114-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251114-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..ca369d1e46de1236d6008f7a3a849e23f4a08d9d --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251114-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,110 @@ +## 笔记部分 +### 一、JS运算符 +#### 逻辑运算符 +- 逻辑与(&&): 【11=1】、【10=0】、【00=0】 +- 逻辑非(!):【1==0=1】、【1==1=0】 +- 逻辑或(||):【10=1】、【01=1】、【11=1】、【00=0】 +#### 其他运算符 +- 逗号运算符:逗号运算符用于将多个表达式排在一起,整个表达式的值是最后一个表达式的值 + +例: +```js +var a,b,c,d +a(b=1,c=2,d=3) +alert(a) + +输出结果:3 +``` +- typeof运算符:用于判断操作数的数据类型,结果返回一个字符串,此字符串代表了操作数的数据类型 + +例: +```js +var a,b,c,d +a=3 //数值 +b="字符串类型"//字符串 +c=false //布尔值 +d=null//空值 +alert(a) +输出结果:number +``` +- new运算符:创建一个新的实例对象 +### 二、表达式 +#### 表达式转换 +1、其他数据类型转数值 + - undefined:NAN + - null:0 + - 逻辑型:若值为true,结果为1;反之为0 + - 字符串:如果字符串是数字则直接转换为数字,否则为NaN + -其他对象:NaN + +2、其他数据类型转逻辑 + - undefined:false + - null:false + - 逻辑型:若值为0或NaN,结果为false;反之为true + - 字符串:若其长度为0,则结果为false,否则为true + -其他对象:true + +3、其他数据类型转字符串 + - undefined:直接转换 + - null:直接转换 + - 逻辑型:若其值为ture,则是"ture",反之亦然 + - 数值:NaN、0、与数值相对应的字符串 + - 其他对象:若存在,则其结果为toString()方法的值;否则其他结果为"undfined" + +### 练习部分 + +``` + +``` \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251117-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251117-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..1f7ae3efa12458d48fbbdea50f73b2aa3d1af208 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251117-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,35 @@ +# 笔记 + +## JS函数 + +- 函数结构:function 函数名(参数){} + +- 参数:形式参数,实际参数 + +- 函数定义:箭头函数、匿名函数、传统函数 + +## 作业 +```JS + +``` + + + +作业2 + +```js + +``` + diff --git "a/\351\231\210\346\226\271\346\227\255/20251119-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251119-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..4f488df8b8b6a58877c2e46e05479ff28c45e3f5 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251119-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,27 @@ +## 笔记部分 + + +### 练习部分 + +``` + +``` + diff --git "a/\351\231\210\346\226\271\346\227\255/20251120-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251120-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..640ddfbcc08314d92b154b1dff180485b59272ce --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251120-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,46 @@ +## 笔记部分 + + +### 练习部分 + +``` + + let time = { + startDate: new Date('2023-05-01'), + endDate: new Date('2023-06-01'), + getHours() { + let msDiff = Math.abs(time.endDate - time.startDate); + return msDiff / 3600000; + } + }; + let hours = time.getHours(); + document.write('开始日期与结束日期的间隔小时数:', hours); + } +``` + +```js + let date1 = new Date(2023,6,7); + let date2 = new Date(2025,11,20); + let date3 = date2.getTime()- date1.getTime(); + let day = Math.ceil(date3/(24*60*60*1000)); + document.write("距离2023年高考已经过了"+day+"天"); +``` + +```js +function gosite(e){ + if(e.button == 0){ + alert('您单击了鼠标左键'); + return false; + } + if(e.button == 1){ + alert('您单击了鼠标中键'); + return false; + } + if(e.button == 2){ + alert('您单击了鼠标右键'); + return false; + } + } + document.onmousedown=gosite; +``` + diff --git "a/\351\231\210\346\226\271\346\227\255/20251121-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251121-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..4b059c14449973a40c2e599c08b5e54d25f66e4e --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251121-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,24 @@ +## 笔记部分 +### 练习部分 + +``` +let arr = new Array(); +arr[0] = "1"; +arr[1] = "2"; +arr[2] = "3"; +``` + +``` +let arr = new Array(3); +arr[0] = 1; +arr[1] = 2; +arr[2] = 3; +``` + +``` +let arr = new Array("1","2","3"); +``` + +``` +let arr = ["1","2","3"]; +``` \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251122-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251122-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..709b28ceee0b7e85b68936f7a0b9d99e1b62e8cb --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251122-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,23 @@ +# 笔记 + +## 一、焦点事件(元素获取 / 失去焦点) + +| 事件名 | 说明 | 语法示例(2 种常用绑定) | +| ---------- | ---------------------- | ------------------------------------------------------- | +| `focus` | 元素获取焦点(无冒泡) | 1. 标签属性:`` | +| | | 2. JS 绑定:`input.addEventListener('focus', () => {})` | +| `blur` | 元素失去焦点(无冒泡) | 1. 标签属性:`` | +| | | 2. JS 绑定:`input.addEventListener('blur', () => {})` | +| `focusin` | 获取焦点(支持冒泡) | `parent.addEventListener('focusin', () => {})` | +| `focusout` | 失去焦点(支持冒泡) | `parent.addEventListener('focusout', () => {})` | + +## 二、表单事件(表单交互相关) + +| 事件名 | 说明 | 语法示例 | +| ------------------------------------------------ | ------------------------------- | -------- | +| `submit` | 表单提交(点击提交按钮 / 回车) | ```js | +| form.addEventListener('submit', (e) => { | | | +| e.preventDefault (); // 阻止默认提交行为(必写) | | | +| // 表单验证、数据提交逻辑 | | | +| }); | | | + diff --git "a/\351\231\210\346\226\271\346\227\255/20251124-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251124-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..20c07d822331dd5620ae546f8b64ab33e4dcca98 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251124-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,73 @@ +# 笔记 + +## 数组与集合 +# JS 数组对象方法速查表 +| 方法名 | 说明 | 简单代码实现 | +| ------ | ---- | ---- | +| `push()` | 向数组末尾添加一个/多个元素,返回新数组长度(改变原数组) | ```js const arr = [1,2]; const len = arr.push(3,4); // len=4, arr=[1,2,3,4] ``` | +| `pop()` | 删除数组最后一个元素,返回被删除的元素(改变原数组) | ```js const arr = [1,2,3]; const del = arr.pop(); // del=3, arr=[1,2] ``` | +| `unshift()` | 向数组开头添加一个/多个元素,返回新数组长度(改变原数组) | ```js const arr = [2,3]; const len = arr.unshift(0,1); // len=4, arr=[0,1,2,3] ``` | +| `shift()` | 删除数组第一个元素,返回被删除的元素(改变原数组) | ```js const arr = [0,1,2]; const del = arr.shift(); // del=0, arr=[1,2] ``` | +| `splice()` | 增删改数组元素,返回被删除元素组成的数组(改变原数组)
参数:起始索引、删除个数、新增元素 | ```js const arr = [1,2,3]; // 删除:从索引1删1个 const del = arr.splice(1,1); // del=[2], arr=[1,3] // 新增:索引1处加2、4 arr.splice(1,0,2,4); // arr=[1,2,4,3] ``` | +| `slice()` | 截取数组片段,返回新数组(不改变原数组)
参数:起始索引(含)、结束索引(不含,可选) | ```js const arr = [1,2,3,4]; const newArr = arr.slice(1,3); // newArr=[2,3], arr不变 ``` | +| `forEach()` | 遍历数组,对每个元素执行回调(无返回值) | ```js const arr = [1,2,3]; arr.forEach((item, idx) => { console.log(item, idx); // 输出1 0、2 1、3 2 }); ``` | +| `map()` | 遍历数组,返回由回调返回值组成的新数组(不改变原数组) | ```js const arr = [1,2,3]; const newArr = arr.map(item => item * 2); // newArr=[2,4,6], arr不变 ``` | +| `filter()` | 过滤数组,返回满足回调条件的元素组成的新数组(不改变原数组) | ```js const arr = [1,2,3,4]; const newArr = arr.filter(item => item % 2 === 0); // newArr=[2,4] ``` | +| `find()` | 遍历数组,返回第一个满足回调条件的元素(不改变原数组,无则返回`undefined`) | ```js const arr = [1,2,3,4]; const res = arr.find(item => item > 2); // res=3 ``` | +| `findIndex()` | 遍历数组,返回第一个满足回调条件的元素索引(不改变原数组,无则返回`-1`) | ```js const arr = [1,2,3,4]; const idx = arr.findIndex(item => item > 2); // idx=2 ``` | +| `some()` | 判断数组是否有至少一个元素满足回调条件,返回布尔值(不改变原数组) | ```js const arr = [1,2,3]; const has = arr.some(item => item > 2); // has=true ``` | +| `every()` | 判断数组是否所有元素都满足回调条件,返回布尔值(不改变原数组) | ```js const arr = [1,2,3]; const all = arr.every(item => item > 0); // all=true ``` | +| `join()` | 将数组元素按指定分隔符拼接为字符串,返回字符串(不改变原数组,默认分隔符为`,`) | ```js const arr = [1,2,3]; const str1 = arr.join(); // str1="1,2,3" const str2 = arr.join('-'); // str2="1-2-3" ``` | +| `concat()` | 合并两个/多个数组,返回新数组(不改变原数组) | ```js const arr1 = [1,2]; const arr2 = [3,4]; const newArr = arr1.concat(arr2); // newArr=[1,2,3,4] ``` | +| `flat()` | 扁平化数组,返回新数组(不改变原数组)
参数:扁平化深度(默认1,`Infinity`表示完全扁平化) | ```js const arr = [1,[2,[3]]]; const flat1 = arr.flat(); // flat1=[1,2,[3]] const flatAll = arr.flat(Infinity); // flatAll=[1,2,3] ``` | +| `flatMap()` | 先执行`map`再执行`flat(1)`,返回新数组(不改变原数组) | ```js const arr = [1,2]; const newArr = arr.flatMap(item => [item, item*2]); // newArr=[1,2,2,4] ``` | +| `sort()` | 对数组元素排序,返回排序后的原数组(改变原数组,默认按字符串Unicode排序) | ```js const arr = [3,1,2]; // 数字升序 arr.sort((a,b) => a - b); // arr=[1,2,3] // 数字降序 arr.sort((a,b) => b - a); // arr=[3,2,1] ``` | +| `reverse()` | 反转数组元素顺序,返回反转后的原数组(改变原数组) | ```js const arr = [1,2,3]; arr.reverse(); // arr=[3,2,1] ``` | +| `reduce()` | 从左到右遍历数组,累计回调返回值,返回最终累计结果(不改变原数组)
参数:回调函数、初始值(可选) | ```js const arr = [1,2,3]; // 求和(无初始值) const sum = arr.reduce((acc, cur) => acc + cur); // sum=6 // 求和(有初始值2) const sum2 = arr.reduce((acc, cur) => acc + cur, 2); // sum2=8 ``` | +| `indexOf()` | 查找元素在数组中首次出现的索引(不改变原数组,无则返回`-1`)
参数:目标元素、起始索引(可选) | ```js const arr = [1,2,3,2]; const idx1 = arr.indexOf(2); // idx1=1 const idx2 = arr.indexOf(2, 2); // idx2=3 ``` | +| `includes()` | 判断数组是否包含目标元素,返回布尔值(不改变原数组)
参数:目标元素、起始索引(可选) | ```js const arr = [1,2,3]; const has = arr.includes(2); // has=true const has2 = arr.includes(2, 2); // has2=false ``` | +| `fill()` | 用指定值填充数组,返回填充后的原数组(改变原数组)
参数:填充值、起始索引(可选)、结束索引(可选,不含) | ```js const arr = [1,2,3]; arr.fill(0); // arr=[0,0,0] arr.fill(9, 1, 2); // arr=[0,9,0] ``` | +| `Array.from()` | 将类数组/可迭代对象转为数组,返回新数组(静态方法) | ```js // 类数组 const likeArr = {0:1, 1:2, length:2}; const arr1 = Array.from(likeArr); // arr1=[1,2] // 字符串 const str = "abc"; const arr2 = Array.from(str); // arr2=['a','b','c'] ``` | +| `Array.of()` | 创建包含指定元素的数组,返回新数组(静态方法,解决`Array()`的歧义) | ```js const arr1 = Array.of(1,2,3); // arr1=[1,2,3] const arr2 = Array.of(5); // arr2=[5](区别于Array(5)返回长度5的空数组) ``` | +| `Array.isArray()` | 判断参数是否为数组,返回布尔值(静态方法) | ```js const res1 = Array.isArray([1,2]); // res1=true const res2 = Array.isArray("abc"); // res2=false ``` | + +## Map集合 +| 方法名/属性 | 说明 | 简单代码实现 | +| ------ | ---- | ---- | +| `new Map()` | 创建空Map实例(或传入可迭代对象初始化,如数组、另一个Map) | ```js // 空Map const map1 = new Map(); // 初始化键值对(数组形式:[[key1, val1], [key2, val2]]) const map2 = new Map([['name', '张三'], [1, '数字']]); // 从另一个Map初始化 const map3 = new Map(map2); ``` | +| `size`(属性) | 返回Map中键值对的数量(只读属性,非方法) | ```js const map = new Map([['a', 1]]); console.log(map.size); // 输出1 ``` | +| `set(key, value)` | 新增/修改键值对(key存在则更新值,不存在则新增),返回当前Map实例(可链式调用) | ```js const map = new Map(); // 新增 map.set('age', 20); // 链式新增 map.set('gender', '男').set('city', '北京'); // 更新 map.set('age', 22); console.log(map); // Map(3) { 'age' => 22, 'gender' => '男', 'city' => '北京' } ``` | +| `get(key)` | 获取指定key对应的value,key不存在则返回`undefined` | ```js const map = new Map([['name', '李四']]); const name = map.get('name'); // name='李四' const addr = map.get('addr'); // addr=undefined ``` | +| `has(key)` | 判断Map是否包含指定key,返回布尔值 | ```js const map = new Map([['id', 1001]]); console.log(map.has('id')); // true console.log(map.has('phone')); // false ``` | +| `delete(key)` | 删除指定key对应的键值对,删除成功返回`true`,key不存在返回`false` | ```js const map = new Map([['name', '王五']]); const res1 = map.delete('name'); // res1=true, map变为空 const res2 = map.delete('name'); // res2=false ``` | +| `clear()` | 清空Map中所有键值对,无返回值(改变原Map) | ```js const map = new Map([['a', 1], ['b', 2]]); map.clear(); console.log(map.size); // 0 ``` | +| `forEach(callback)` | 遍历Map,对每个键值对执行回调(无返回值)
回调参数:value、key、当前Map | ```js const map = new Map([['name', '赵六'], ['age', 25]]); map.forEach((value, key, map) => { console.log(`${key}: ${value}`); // 输出name: 赵六、age: 25 }); ``` | +| `keys()` | 返回Map中所有key的迭代器对象,可通过`for...of`遍历 | ```js const map = new Map([['a', 1], ['b', 2]]); const keys = map.keys(); for (const key of keys) { console.log(key); // 输出a、b } ``` | +| `values()` | 返回Map中所有value的迭代器对象,可通过`for...of`遍历 | ```js const map = new Map([['a', 1], ['b', 2]]); const values = map.values(); for (const val of values) { console.log(val); // 输出1、2 } ``` | +| `entries()` | 返回Map中所有`[key, value]`的迭代器对象(默认遍历Map时使用此迭代器) | ```js const map = new Map([['a', 1], ['b', 2]]); const entries = map.entries(); for (const [key, val] of entries) { console.log(key, val); // 输出a 1、b 2 } // 简写(直接遍历Map) for (const [key, val] of map) { console.log(key, val); // 同上 } ``` | +| `Map.from(iterable)` | (ES2022+静态方法)将可迭代对象(如数组、Set、Map)转为Map,返回新Map | ```js // 数组转Map const arr = [['x', 10], ['y', 20]]; const map1 = Map.from(arr); // Map(2) { 'x' => 10, 'y' => 20 } // Set转Map(Set元素需为[key, value]数组) const set = new Set([['a', 1]]); const map2 = Map.from(set); // Map(1) { 'a' => 1 } ``` | +| `Map.of(...entries)` | (ES2022+静态方法)创建包含指定键值对的Map,返回新Map(直接传入key-value参数,无需嵌套数组) | ```js const map = Map.of('name', '孙七', 'age', 30); console.log(map); // Map(2) { 'name' => '孙七', 'age' => 30 } ``` | +| `Map.prototype[Symbol.iterator]` | 迭代器方法,返回`entries()`迭代器(支持`for...of`直接遍历Map的核心) | ```js const map = new Map([['a', 1]]); const iter = map[Symbol.iterator](); console.log(iter.next().value); // ['a', 1] ``` | + +## set集合速查表 +| 方法名/属性 | 说明 | 简单代码实现 | +| ------ | ---- | ---- | +| `new Set()` | 创建空Set实例(或传入可迭代对象初始化,自动去重重复元素) | ```js // 空Set const set1 = new Set(); // 传入数组初始化(自动去重) const set2 = new Set([1,2,2,3]); // set2 = Set(3) {1,2,3} // 传入字符串初始化(按字符去重) const set3 = new Set("aabcc"); // set3 = Set(3) {'a','b','c'} ``` | +| `size`(属性) | 返回Set中元素的个数(只读属性,非方法) | ```js const set = new Set([1,2,3]); console.log(set.size); // 输出3 ``` | +| `add(value)` | 向Set中添加元素(重复元素会被忽略),返回当前Set实例(可链式调用) | ```js const set = new Set(); // 单个添加 set.add(1); // 链式添加 set.add(2).add(3).add(2); // 重复添加2被忽略 console.log(set); // Set(3) {1,2,3} ``` | +| `delete(value)` | 从Set中删除指定元素,删除成功返回`true`,元素不存在返回`false` | ```js const set = new Set([1,2,3]); const res1 = set.delete(2); // res1=true, set变为{1,3} const res2 = set.delete(4); // res2=false ``` | +| `has(value)` | 判断Set是否包含指定元素,返回布尔值 | ```js const set = new Set([1,2,3]); console.log(set.has(2)); // true console.log(set.has(4)); // false ``` | +| `clear()` | 清空Set中所有元素,无返回值(改变原Set) | ```js const set = new Set([1,2,3]); set.clear(); console.log(set.size); // 0 ``` | +| `forEach(callback)` | 遍历Set,对每个元素执行回调(无返回值)
回调参数:value、key(与value相同)、当前Set | ```js const set = new Set([1,2,3]); set.forEach((value, key, set) => { console.log(`${key}: ${value}`); // 输出1:1、2:2、3:3(key=value) }); ``` | +| `keys()` | 返回Set中所有元素的迭代器对象(与`values()`效果一致,因Set无键值区分) | ```js const set = new Set([1,2,3]); const keys = set.keys(); for (const key of keys) { console.log(key); // 输出1、2、3 } ``` | +| `values()` | 返回Set中所有元素的迭代器对象(Set默认迭代器) | ```js const set = new Set([1,2,3]); const values = set.values(); for (const val of values) { console.log(val); // 输出1、2、3 } ``` | +| `entries()` | 返回Set中所有`[value, value]`的迭代器对象(因Set无键值区分,键和值相同) | ```js const set = new Set([1,2,3]); const entries = set.entries(); for (const [key, val] of entries) { console.log(key, val); // 输出1 1、2 2、3 3 } ``` | +| `for...of` 遍历 | 直接遍历Set元素(依托`Symbol.iterator`迭代器,等价于遍历`values()`) | ```js const set = new Set([1,2,3]); for (const val of set) { console.log(val); // 输出1、2、3 } ``` | +| `Set.from(iterable)` | (ES2022+静态方法)将可迭代对象(如数组、Set、字符串)转为Set,自动去重 | ```js // 数组转Set(去重) const arr = [1,2,2,3]; const set1 = Set.from(arr); // Set(3) {1,2,3} // 字符串转Set(按字符去重) const str = "aabbcc"; const set2 = Set.from(str); // Set(3) {'a','b','c'} ``` | +| `Set.of(...values)` | (ES2022+静态方法)创建包含指定元素的Set,自动去重重复参数 | ```js const set = Set.of(1,2,2,3,4); console.log(set); // Set(4) {1,2,3,4} ``` | +| `Set.prototype[Symbol.iterator]` | 迭代器方法,返回`values()`迭代器(支持`for...of`直接遍历Set的核心) | ```js const set = new Set([1,2]); const iter = set[Symbol.iterator](); console.log(iter.next().value); // 1 console.log(iter.next().value); // 2 ``` | +| 转数组技巧 | Set无原生转数组方法,可通过`Array.from()`或扩展运算符`[...set]`实现 | ```js const set = new Set([1,2,3]); // 方法1:Array.from() const arr1 = Array.from(set); // [1,2,3] // 方法2:扩展运算符 const arr2 = [...set]; // [1,2,3] ``` | + + +## 作业 + diff --git "a/\351\231\210\346\226\271\346\227\255/20251126-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251126-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..a8de1f1cb2de580591d79cf05d00a6e4cb23f641 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251126-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,49 @@ +# 笔记 + +### 正则表达式 + +- 正则表达式是一个用简单语法来描述的字符串模式,通常用于替换验证文本内容 + +## 正则表达式简单速查表 + +## 一、基础语法 + +| 类型 | 符号 | 说明 | 示例 | +| ---------- | -------------- | ------------------------------ | -------------------------- | +| 字面量 | 直接字符 | 匹配自身(字母 / 数字 / 符号) | `/abc/` 匹配 "abc" | +| 转义字符 | `\` | 匹配特殊字符(`.`/`*`等) | `/\./` 匹配 "." | +| 字符类 | `[abc]` | 匹配任意一个指定字符 | `/[abc]/` 匹配 "a"/"b"/"c" | +| 反向字符类 | `[^abc]` | 匹配非指定字符 | `/[^abc]/` 匹配 "d"/"1" | +| 范围匹配 | `[a-z0-9]` | 匹配区间内字符(简写) | `/[0-9]/` 匹配数字 | +| 预定义类 | `\d`/`\w`/`\s` | 数字 / 字母下划线 / 空白符 | `/\d/` 等价于 `[0-9]` | +| 边界匹配 | `^`/`$` | 行首 / 行尾 | `/^abc$/` 匹配整行 "abc" | +| 量词 | `*`/`+`/`?` | 0 + 次 / 1 + 次 / 0-1 次 | `/a*/` 匹配 ""/"a"/"aa" | +| 精确量词 | `{n}`/`{n,}` | 恰好 n 次 / 至少 n 次 | `/a{2}/` 匹配 "aa" | + +## 二、常用方法 + +| 方法 | 所属对象 | 功能 | 示例 | +| -------------- | -------- | ----------------------------------- | ------------------------------------------------- | +| `test()` | RegExp | 验证字符串是否匹配,返回布尔值 | `/\d+/.test("123")` → `true` | +| `match()` | String | 匹配结果存入数组(无匹配返回 null) | "abc123".match(/\d+/) → `["123"]` | +| `replace()` | String | 替换匹配内容 | "abc".replace(/a/, "x") → "xbc" | +| `replaceAll()` | String | 替换所有匹配(需加`g`修饰符) | "aaa".replaceAll(/a/g, "b") → "bbb" | +| `exec()` | RegExp | 逐次匹配(支持分组捕获) | `/(\d)([a-z])/.exec("1a2b")` → `["1a", "1", "a"]` | + +## 三、修饰符 + +| 修饰符 | 说明 | 示例 | +| ------ | ------------------------------- | ----------------------------------- | +| `i` | 忽略大小写 | `/abc/i` 匹配 "ABC"/"abc" | +| `g` | 全局匹配(不终止于第一个匹配) | "aaa".match(/a/g) → `["a","a","a"]` | +| `m` | 多行匹配(`^`/`$`匹配行首行尾) | `/^a/m` 匹配 "a\nabc" 中第一行 "a" | + +## 四、实用示例(直接复用) + +| 场景 | 正则表达式 | 说明 | +| ---------- | ------------------------------- | ----------------------------- | +| 手机号验证 | `/^1[3-9]\d{9}$/` | 中国大陆手机号(11 位) | +| 邮箱验证 | `/^\w+@[a-z0-9]+\.[a-z]{2,}$/i` | 简单邮箱格式(含域名后缀) | +| 提取数字 | `/\d+/g` | 匹配字符串中所有数字 | +| 去除空格 | `/\s+/g` | 替换所有空白符(空格 / 换行) | +| 匹配中文 | `/[\u4e00-\u9fa5]/g` | 匹配中文字符 | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251127-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251127-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..2f6b29d73bcadffe0246d12ec9ef894a463a5eee --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251127-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,41 @@ +# 笔记 + +## 异常处理 + + + +## 核心语法:try-catch (-finally) + +### 1. 基础格式(捕获异常) + +```js +try { + // 可能发生错误的代码(如:运算、接口请求、DOM操作) +} catch (error) { + // 错误发生时执行:处理异常(如:提示用户、打印日志) +} +``` + +### 2. 带 finally 格式(无论是否出错都执行) + +```js +try { + // 可能出错的代码 +} catch (error) { + // 处理异常 +} finally { + // 必执行代码(如:关闭弹窗、释放资源) +} +``` + +### 3. 主动抛出异常(throw) + +```js +// 主动触发异常(可抛字符串、Error对象等,推荐Error) +throw new Error("自定义错误信息"); // 推荐:带堆栈信息,便于调试 +// 或简化(不推荐,无堆栈):throw "错误信息"; +``` + + +## + diff --git "a/\351\231\210\346\226\271\346\227\255/20251128-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251128-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..709b28ceee0b7e85b68936f7a0b9d99e1b62e8cb --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251128-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,23 @@ +# 笔记 + +## 一、焦点事件(元素获取 / 失去焦点) + +| 事件名 | 说明 | 语法示例(2 种常用绑定) | +| ---------- | ---------------------- | ------------------------------------------------------- | +| `focus` | 元素获取焦点(无冒泡) | 1. 标签属性:`` | +| | | 2. JS 绑定:`input.addEventListener('focus', () => {})` | +| `blur` | 元素失去焦点(无冒泡) | 1. 标签属性:`` | +| | | 2. JS 绑定:`input.addEventListener('blur', () => {})` | +| `focusin` | 获取焦点(支持冒泡) | `parent.addEventListener('focusin', () => {})` | +| `focusout` | 失去焦点(支持冒泡) | `parent.addEventListener('focusout', () => {})` | + +## 二、表单事件(表单交互相关) + +| 事件名 | 说明 | 语法示例 | +| ------------------------------------------------ | ------------------------------- | -------- | +| `submit` | 表单提交(点击提交按钮 / 回车) | ```js | +| form.addEventListener('submit', (e) => { | | | +| e.preventDefault (); // 阻止默认提交行为(必写) | | | +| // 表单验证、数据提交逻辑 | | | +| }); | | | + diff --git "a/\351\231\210\346\226\271\346\227\255/20251201-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251201-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..bf0ca979b7cede28413d581e3050f48d856dfe12 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251201-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,16 @@ +## 拖拽方法 + +### 事件详解 + +#### 拖拽源事件 + +1. dragstart:当用户开始拖拽一个元素时触发。通常在此事件中设置拖拽数据(如拖拽元素的ID)和拖拽效果。 +2. drag:拖拽过程中连续触发(类似于mousemove事件)。 +3. dragend:拖拽结束(松开鼠标)时触发,无论拖拽成功与否都会触发。 + +#### 放置目标事件 + +1. dragenter:当拖拽元素进入放置区域时触发。通常用于给放置区域添加视觉反馈。 +2. dragover:当拖拽元素在放置区域上方移动时连续触发。必须在此事件中调用event.preventDefault()才能允许放置。 +3. dragleave:当拖拽元素离开放置区域时触发。通常用于移除视觉反馈。 +4. drop:当拖拽元素在放置区域释放时触发。必须在此事件中调用event.preventDefault()才能执行放置操作。通常在此事件中处理拖拽数据的接收和处理。 \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251203\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251203\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..dcd7349aa662fdea5f2f8425b991c2dae2c8b123 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251203\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,80 @@ +# 笔记 + +Document 是 DOM(文档对象模型)的核心对象,代表整个 HTML/XML 文档,是操作页面内容、结构和行为的入口。以下为高频使用的属性 / 方法速查,按功能分类,附简洁示例。 + +## 一、核心属性(快速获取文档关键信息) + +| 属性名 | 说明 | 示例 | +| ------------------------ | -------------------------------------------- | ------------------------------------------------------------ | +| document.documentElement | 获取文档根元素(``,操作根节点首选) | `const html = document.documentElement;` | +| document.body | 获取``元素 | `document.body.style.background = '#f5f5f5';` | +| document.head | 获取``元素 | `const meta = document.head.querySelector('meta[name="viewport"]');` | +| document.title | 获取 / 设置页面标题(``内容) | `document.title = '新标题';` | +| document.URL | 获取当前文档完整 URL(只读) | `console.log(document.URL);` | +| document.domain | 获取当前文档域名(只读,部分场景可设置) | `console.log(document.domain);` | +| document.readyState | 文档加载状态(loading/interactive/complete) | `if (document.readyState === 'complete') { /* 加载完成 */ }` | +| document.activeElement | 获取当前获焦元素 | `console.log(document.activeElement.tagName);` | + +## 二、选择器方法(获取 DOM 元素) + +| 方法名 | 说明 | 示例 | +| --------------------------------- | ------------------------------------------- | -------------------------------------------------------- | +| getElementById(id) | 通过 ID 获取单个元素(无则 null) | `const box = document.getElementById('box');` | +| querySelector(selector) | 通过 CSS 选择器获取第一个匹配元素 | `const btn = document.querySelector('.btn');` | +| querySelectorAll(selector) | 通过 CSS 选择器获取所有匹配元素(NodeList) | `const items = document.querySelectorAll('.list-item');` | +| getElementsByClassName(className) | 通过类名获取元素(HTMLCollection,动态) | `const boxes = document.getElementsByClassName('box');` | +| getElementsByTagName(tagName) | 通过标签名获取元素(HTMLCollection,动态) | `const divs = document.getElementsByTagName('div');` | +| getElementsByName(name) | 通过 name 属性获取元素(NodeList) | `const inputs = document.getElementsByName('username');` | + +## 三、节点创建 / 添加 / 删除(DOM 操作) + +| 方法名 | 说明 | 示例 | +| ------------------------------ | --------------------------------------- | ------------------------------------------------------------ | +| createElement(tagName) | 创建新元素节点 | `const p = document.createElement('p'); p.textContent = '新段落';` | +| createTextNode(text) | 创建文本节点 | `const textNode = document.createTextNode('Hello');` | +| createAttribute(name) | 创建属性节点 | `const attr = document.createAttribute('data-id'); attr.value = '123';` | +| appendChild(child) | 向父节点末尾添加子节点(parent 为元素) | `document.body.appendChild(p);` | +| insertBefore(newNode, refNode) | 在参考节点前插入新节点 | `document.body.insertBefore(p, document.body.firstChild);` | +| removeChild(child) | 删除父节点下的子节点 | `document.body.removeChild(p);` | +| replaceChild(newNode, oldNode) | 替换父节点下的子节点 | `document.body.replaceChild(p, document.body.firstChild);` | + +## 四、文档信息与设置 + +| 属性 / 方法名 | 说明 | 示例 | +| ------------- | --------------------------------------- | ------------------------------------- | +| characterSet | 获取文档字符编码(如 UTF-8) | `console.log(document.characterSet);` | +| dir | 获取 / 设置文本方向(ltr/rtl) | `document.dir = 'ltr';` | +| lastModified | 获取文档最后修改时间(字符串) | `console.log(document.lastModified);` | +| defaultView | 获取关联的 window 对象(等价于 window) | `const win = document.defaultView;` | + +## 五、事件处理 + +| 方法名 | 说明 | 示例 | +| ---------------------------------- | ----------------------------------------- | ------------------------------------------------------------ | +| addEventListener(type, handler) | 为文档添加事件监听 | `document.addEventListener('click', () => console.log('点击文档'));` | +| removeEventListener(type, handler) | 移除事件监听(需与添加时的 handler 一致) | `const handler = () => {}; document.removeEventListener('click', handler);` | +| dispatchEvent(event) | 触发自定义事件 | `const customEvt = new Event('custom'); document.dispatchEvent(customEvt);` | +| DOMContentLoaded 事件 | DOM 解析完成(无需等待资源) | `document.addEventListener('DOMContentLoaded', () => console.log('DOM 就绪'));` | +| load 事件 | 页面所有资源加载完成 | `document.addEventListener('load', () => console.log('页面加载完成'));` | + +## 六、Cookie 操作 + +| 属性 / 方法名 | 说明 | 示例 | +| --------------- | ---------------------------------- | ------------------------------------------------------------ | +| document.cookie | 获取 / 设置 Cookie(键值对字符串) | `// 设置:有效期1小时,全站生效``document.cookie = 'username=zhangsan; max-age=3600; path=/';``// 获取``console.log(document.cookie);` | + +## 七、其他常用功能 + +| 方法名 | 说明 | 示例 | +| ---------------------- | -------------------------------------------- | ------------------------------------------------------------ | +| write(text) | 向文档写入内容(加载后调用会覆盖文档) | `document.write('Hello');` | +| writeln(text) | 写入内容并换行(等价于 write (text + '\n')) | `document.writeln('第一行');` | +| cloneNode(deep) | 克隆文档节点(deep=true 深克隆) | `const clone = document.documentElement.cloneNode(true);` | +| importNode(node, deep) | 从其他文档导入节点到当前文档 | `const iframeDoc = iframe.contentDocument; const node = document.importNode(iframeDoc.body, true);` | + +## 重要备注 + +1. **HTMLCollection vs NodeList**:HTMLCollection 是动态集合(DOM 变化自动更新),NodeList 除 `querySelectorAll` 返回静态外,其余(如 `getElementsByName`)为动态; +2. 避免滥用 `document.write`:页面加载完成后调用会覆盖整个文档,且性能较差; +3. **DOMContentLoaded vs load**:前者仅等待 DOM 解析完成,后者需等待图片、样式等所有资源加载; +4. Cookie 安全:设置时建议添加 `secure`(仅 HTTPS)、`SameSite`(防止 CSRF)属性。 \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251204\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251204\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..cc468fe78f9561562a4d442676dd774117eee64b --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251204\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,39 @@ +# DOM 节点速查表 + +## 一、核心节点属性 + +| 属性名 | 说明 | +| --------------- | ---------------------------------------- | +| nodeName | 节点的名称 | +| nodeValue | 节点的值(通常仅用于文本节点) | +| nodeType | 节点的类型(修正原拼写错误:nodeTyep) | +| parentNode | 返回当前节点的父节点 | +| childNodes | 返回当前节点的所有子节点列表(NodeList) | +| firstChild | 返回当前节点的第一个子节点 | +| lastChild | 返回当前节点的最后一个子节点 | +| previousSibling | 返回当前节点的前一个兄弟节点 | +| nextSibling | 返回当前节点的后一个兄弟节点 | +| attributes | 返回元素节点的属性列表(NamedNodeMap) | + +## 二、节点操作方法 + +| 操作类型 | 语法 | 说明 | +| -------- | -------------------------- | ------------------------------------------------------------ | +| 追加节点 | obj.appendChild(newChild) | 向 obj 节点末尾追加新子节点 newChild | +| 插入节点 | obj.insertBefore(new, ref) | 在 obj 节点的 ref 子节点**之前**插入 new 节点 | +| 复制节点 | obj.cloneNode(deep) | 复制 obj 节点;deep=true:深拷贝(含所有子节点);deep=false:浅拷贝(仅当前节点) | +| 删除节点 | obj.removeChild(oldChild) | 从 obj 节点中删除子节点 oldChild | +| 替换节点 | obj.replaceChild(new, old) | 用 new 节点替换 obj 节点下的 old 子节点 | + +## 三、文档元素获取 + +| 获取方式 | 语法 | 说明 | +| -------- | ----------------------------------------- | ------------------------------------------------------------ | +| 通过 ID | document.getElementById("userId") | 获取文档中匹配指定 ID 的**单个**元素(ID 唯一) | +| 通过类名 | document.getElementsByClassName("userId") | 获取文档中匹配指定类名的**元素集合**(HTMLCollection)(修正原拼写错误:缺少 s) | + +### 补充说明 + +1. `childNodes`/`getElementsByClassName` 返回的是**动态集合**,文档结构变化会自动更新; +2. `firstChild`/`lastChild` 可能获取到文本节点(如换行、空格),需结合 `nodeType` 过滤(元素节点 `nodeType=1`); +3. `getElementById` 是 `document` 专属方法,无法通过普通元素节点调用。 \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251205-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251205-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..14945abcd068ce76726edb63d2ee8458f1330ae1 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251205-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,52 @@ +# 笔记 + +## 一、DHTML 内容替换属性 + +| 属性名 | 语法示例 | 核心说明 | +| --------- | ---------------------------------- | ---------------------------------------------------- | +| innerHTML | `element.innerHTML = "新内容"` | 替换元素内容(支持 HTML 标签,会解析标签并渲染) | +| innerText | `element.innerText = "纯文本内容"` | 仅操作元素的纯文本内容(忽略 HTML 标签,只显示文本) | +| outerHTML | `element.outerHTML = "新元素"` | 替换元素本身(含标签)+ 内容,原元素会被移除 | +| outerText | `element.outerText = "替换文本"` | 将元素本身替换为纯文本节点,原元素被移除 | + +## 二、Window 对象核心特性 + +### 2.1 常用属性 + +| 属性名 | 简化写法 | 语法 / 用途 | 说明 | +| ------------------ | --------- | ------------------------------------------ | ----------------------------------------- | +| window.document | document | `window.document` | 指向窗口载入的 DOM 文档,DOM 操作核心入口 | +| window.location | location | `window.location.href = "https://xxx.com"` | 获取 / 设置当前窗口的 URL(地址) | +| window.navigator | navigator | `window.navigator.userAgent` | 返回浏览器信息(版本、内核、设备等) | +| window.screen | screen | `window.screen.width` | 屏幕对象引用,含屏幕分辨率、色深等信息 | +| window.innerHeight | - | `let h = window.innerHeight` | 浏览器窗口内部高度(含滚动条,不含边框) | +| window.innerWidth | - | `let w = window.innerWidth` | 浏览器窗口内部宽度(含滚动条,不含边框) | + +### 2.2 常用方法 + +| 方法名 | 语法示例 | 说明 | +| ----------------- | ---------------------------------------------------- | -------------------------------------------------------- | +| window.open() | `window.open("url", "name", "width=300,height=200")` | 打开新窗口,可指定 URL、窗口名、尺寸参数 | +| window.close() | `window.close()` | 关闭当前窗口(仅对脚本打开的窗口有效,浏览器有安全限制) | +| window.resizeTo() | `window.resizeTo(800, 600)` | 将窗口调整为**绝对尺寸**(宽 800px,高 600px) | +| window.resizeBy() | `window.resizeBy(100, 50)` | 相对当前尺寸调整窗口(宽 + 100px,高 + 50px) | +| window.moveTo() | `window.moveTo(100, 200)` | 将窗口移动到屏幕**绝对坐标**(x=100px,y=200px) | +| window.moveBy() | `window.moveBy(50, 30)` | 相对当前位置移动窗口(x+50px,y+30px) | +| window.alert() | `window.alert("提示信息")` | 显示无交互提示框(仅 “确定” 按钮) | +| window.confirm() | `let res = window.confirm("确认操作?")` | 显示确认框(返回布尔值:确认 = true / 取消 = false) | +| window.prompt() | `let val = window.prompt("输入内容", "默认值")` | 显示输入框(返回输入值,取消则返回 null) | + +### 2.3 事件处理方法 + +| 方法名 | 语法示例 | 说明 | +| ---------------------------- | ---------------------------------------- | ------------------------------------------------- | +| window.addEventListener() | `window.addEventListener("load", fn)` | 为 window 注册指定事件的处理器(支持冒泡 / 捕获) | +| window.removeEventListener() | `window.removeEventListener("load", fn)` | 移除已注册的事件监听器(需与注册时函数引用一致) | + +### 2.4 其他核心特性 + +| 特性名 | 简化写法 | 语法 / 用途 | 说明 | +| --------------------- | -------------- | ---------------------------------------- | ----------------------------------------------- | +| window.history | history | `history.back()` / `history.go(-1)` | 操作浏览器历史记录(后退、前进、跳转) | +| window.localStorage | localStorage | `localStorage.setItem("key", "value")` | 本地存储(永久保存,除非手动清除,跨会话) | +| window.sessionStorage | sessionStorage | `sessionStorage.setItem("key", "value")` | 会话存储(仅当前窗口 / 标签页有效,关闭则清除) | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251208-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251208-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..7278c241f5ab45b028e8b6fb428bd5368d1c1e38 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251208-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,62 @@ +# 笔记 + +## 浏览器对象模型 + +### location对象 + +提供当前对象窗口中加载文档的信息,以及导航功能 + +| 属性 | 说明 | +| --------- | ---------------------------------------------- | +| href: | 设置或返回完整的URL。 | +| protocol: | 设置或返回URL的协议部分(例如http:或https:)。 | +| host: | 设置或返回URL的主机名和端口号。 | +| hostname: | 设置或返回URL的主机名。 | +| port: | 设置或返回URL的端口号。 | +| pathname: | 设置或返回URL的路径部分。 | +| search: | 设置或返回URL的查询部分(从问号?开始)。 | +| hash: | 设置或返回URL的锚部分(从井号#开始)。 | + +### location对象的方法 + +1. assign()方法 + - 用于跳转到新的页面 +2. reload() + - 用于重新载入当前页面 + +### navigator对象 + +| 属性 | 说明 | +| ------------- | ------------------------ | +| appCodeName | 获取浏览器代码名 | +| userAgent | 获取浏览器的整体信息 | +| appName | 获取浏览器名称 | +| appVersion | 获取浏览器的版本号 | +| platform | 获取当前计算机的操作系统 | +| cookieEnabled | 判断是否启用Cookies | + +### screen对象 + +| 属性 | 说明 | +| ------------ | ------------------------------------------ | +| availHeight: | 返回屏幕的高度(不包括 Windows 任务栏)。 | +| availWidth: | 返回屏幕的宽度(不包括 Windows 任务栏)。 | +| colorDepth: | 返回目标设备或缓冲器上的调色板的比特深度。 | +| height: | 返回屏幕的总高度。 | +| pixelDepth: | 返回屏幕的颜色分辨率(每像素的位数)。 | +| width: | 返回屏幕的总宽度。 | + +### history对象 + +| 属性 | 说明 | +| -------- | ------------------- | +| length | 历史列表中的URL数量 | +| current | 当前文档的URL | +| next | 历史列表的下一个URL | +| previous | 历史列表的前一个URL | + +| 方法 | 说明 | +| --------- | -------------- | +| back() | 退回前一页 | +| forward() | 重新进入下一页 | +| go() | 进入指定的网页 | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251210-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251210-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..02998eae29a5f204b5d7d4eb9c4f2faac03bd7ad --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251210-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,28 @@ +# Style 对象核心属性速查表 + +## 一、Style 对象基础使用 + +| 核心语法 | 说明 | 示例 | +| ------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------------- | +| document.getElementById ("id").style. 属性 | 通过 DOM 元素获取 Style 对象,修改元素**行内 CSS 样式**(优先级高于外部 / 内部样式) | document.getElementById("box").style.color = "#333"; | + +## 二、颜色与背景属性 + +| 属性名 | 语法示例 | 核心说明 | +| -------------------- | ---------------------------------------------- | ------------------------------------------------------------ | +| backgroundColor | `elem.style.backgroundColor = "#f00"` | 设置元素背景颜色(支持十六进制、RGB/RGBA、颜色名、HSL 等格式) | +| color | `elem.style.color = "rgb(255,255,255)"` | 设置元素文本颜色(支持所有合法颜色值格式) | +| backgroundImage | `elem.style.backgroundImage = "url('bg.png')"` | 设置背景图片,需通过`url()`指定图片路径(支持相对 / 绝对路径、base64) | +| backgroundPosition | `elem.style.backgroundPosition = "center top"` | 设置背景图片位置(支持关键字:center/top/bottom/left/right;像素 / 百分比) | +| backgroundRepeat | `elem.style.backgroundRepeat = "no-repeat"` | 背景图片平铺方式:repeat(默认,全平铺)repeat-x(水平)repeat-y(垂直)no-repeat(不平铺) | +| backgroundAttachment | `elem.style.backgroundAttachment = "fixed"` | 背景图片滚动行为:fixed(固定,不随滚动条滚动)scroll(随内容滚动) | + +## 三、定位相关属性 + +| 属性名 | 语法示例 | 核心说明 | +| ---------- | ---------------------------------------------- | ------------------------------------------------------------ | +| clip | `elem.style.clip = "rect(0, 100px, 100px, 0)"` | 仅对`position: absolute`的元素生效,设置可视区域(超出部分透明);语法:rect (上,右,下,左) | +| top | `elem.style.top = "20px"` | 定位元素上边界位置,需配合`position`(absolute/relative/fixed/sticky)生效 | +| left | `elem.style.left = "50%"` | 定位元素左边界位置,需配合`position`属性生效 | +| paddingTop | `elem.style.paddingTop = "15px"` | 设置元素**顶部内边距**(盒模型属性,非定位属性,与父 / 子元素位置相关) | +| position | `elem.style.position = "relative"` | 元素定位方式:static(默认,无定位)relative(相对自身原位置)absolute(相对最近定位父级)fixed(相对视口)sticky(粘性定位,滚动阈值后固定) | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251211-\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251211-\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..10ca1eed19083a416e285d174a2d26d1d9a409da --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251211-\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,21 @@ + + +## Form对象 + +### js访问表单 + +1. document.forms[] 按编号进行访问 +2. document.formname 按名称进行访问 +3. document.getElementById("") 定位访问表单 + +### Form对象的属性,方法与事件 + +| 属性 | 说明 | +| -------- | ---------------------------------------------------- | +| name | 返回或设置表单的名称 | +| action | 返回或设置表单提交的URL | +| method | 返回或设置表单提交的方式,可取值为get或post | +| encoding | 返回或设置表单信息提交的编码方式 | +| id | 返回或设置表单的id | +| target | 返回或设置提交表单时目标窗口的打开方式 | +| elements | 返回表单对象中的元素构成的数组,数组中的元素也是对象 | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251212\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251212\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..10ca1eed19083a416e285d174a2d26d1d9a409da --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251212\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,21 @@ + + +## Form对象 + +### js访问表单 + +1. document.forms[] 按编号进行访问 +2. document.formname 按名称进行访问 +3. document.getElementById("") 定位访问表单 + +### Form对象的属性,方法与事件 + +| 属性 | 说明 | +| -------- | ---------------------------------------------------- | +| name | 返回或设置表单的名称 | +| action | 返回或设置表单提交的URL | +| method | 返回或设置表单提交的方式,可取值为get或post | +| encoding | 返回或设置表单信息提交的编码方式 | +| id | 返回或设置表单的id | +| target | 返回或设置提交表单时目标窗口的打开方式 | +| elements | 返回表单对象中的元素构成的数组,数组中的元素也是对象 | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251215\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251215\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..2a8935b8a72ace1504b6ec828420e134a6bf31c2 --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251215\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,25 @@ + + +# jQuery 基础速查表 + +| 分类 | 语法 / 方法 | 说明 | 示例 | +| ------------- | ------------------------------ | ------------------------------------ | ---------------------------------------------- | +| 📌 jQuery 基础 | `` | 引入 jQuery 库(建议放 body 结束前) | 放在``前引入 | +| | `$` | jQuery 的入口(是方法 / 对象) | 用`$`调用 jQuery 能力 | +| | `$('选择器')` | 获取 jQuery 对象(≠原生 DOM 对象) | `let $div = $('div')` | +| | `$jq对象[0]` | jQuery 对象转原生 DOM 对象 | `$div[0]`(得到原生 div 节点) | +| | `$(原生DOM对象)` | 原生 DOM 对象转回 jQuery 对象 | `$($div[0])` | +| 🔍 基础选择器 | `$('标签名')` | 标签选择器 | `$('p')`(选所有 p 标签) | +| | `$('.类名')` | 类选择器 | `$('.box')`(选所有 class 为 box 的元素) | +| | `$('#id名')` | ID 选择器(页面唯一) | `$('#btn')`(选 id 为 btn 的元素) | +| 🔗 关系选择器 | `$('父 子')` | 子代选择器(父元素下所有子元素) | `$('ul li')`(选 ul 下所有 li) | +| | `$('父>子')` | 直接子代选择器(父元素的直接子元素) | `$('ul>li')`(选 ul 的直接子 li) | +| | `$('元素~兄弟')` | 兄弟选择器(元素后的所有兄弟) | `$('li~li')`(选 li 后的兄弟 li) | +| | `$('元素+相邻兄弟')` | 相邻兄弟选择器(元素后的第一个兄弟) | `$('li+li')`(选 li 的下一个兄弟 li) | +| 🛠️ 高级选择器 | `$('[属性]')` | 属性选择器 | `$('[data-id]')`(选带 data-id 属性的元素) | +| | `$(':伪类')` | 伪类选择器 | `$('li:even')`(选偶数位置的 li) | +| | `$('::伪元素')` | 伪元素选择器 | `$('p::before')`(选 p 的 before 伪元素) | +| 🎯 事件处理 | `$jq.on('click',function(){})` | 绑定事件 | `$btn.on('click', ()=>{alert('点击了')})` | +| | `$jq.click(function(){})` | 快捷绑定点击事件 | `$btn.click(()=>{alert('点击了')})` | +| | `$jq.trigger('click')` | 手动触发事件 | `$btn.trigger('click')`(主动触发 btn 的点击) | +| | `$(function(){})` | jQuery 入口函数(DOM 加载后执行) | `$(function(){ $btn.click() })` | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251217\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251217\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..15f062e42264796a563a24e1eb2b640d15e9850a --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251217\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,29 @@ + + +# jQuery DOM 操作速查表 + +| 分类 | 方法 / 语法 | 说明 | 极简示例 | +| ----------------- | ------------------------------ | -------------------------------------------- | ----------------------------------------- | +| 🔄 对象转换 | `$(原生DOM)` | 原生 DOM 转 jQuery 对象 | `$(document.getElementById('box'))` | +| | `$jq[0]` / `$jq.get(0)` | jQuery 对象转原生 DOM | `$('div')[0]` | +| 🔍 DOM 查找 | `$('#id')` | ID 选择器(唯一) | `$('#container')` | +| | `$('.class')` | 类选择器(批量) | `$('.content')` | +| | `$('tag')` | 标签选择器 | `$('li')` | +| | `$el.find('selector')` | 查找后代元素(性能优) | `$('#list').find('.item')` | +| | `$el.parent()` | 查找直接父节点 | `$('.content').parent()` | +| | `$el.siblings('selector')` | 查找同级兄弟节点 | `$('.content').siblings('span')` | +| 📝 DOM 创建 / 插入 | `$('')` | 创建 jQuery 元素 | `$('新项')` | +| | `$parent.append($el)` | 尾部插入子元素(最常用) | `$('#list').append($newLi)` | +| | `$parent.prepend($el)` | 头部插入子元素 | `$('#container').prepend($newBtn)` | +| | `$el.after('html/$el')` | 后方插入兄弟元素 | `$('.content').after('后')` | +| ✏️ DOM 修改 | `$el.text('内容')` | 设置 / 获取纯文本(防 XSS) | `$('.content').text('新文本')` | +| | `$el.html('内容')` | 设置 / 获取 HTML 内容(注意 XSS) | `$('.content').html('加粗')` | +| | `$el.attr('key','val')` | 设置 / 获取属性 | `$el.attr('data-id', 123)` | +| | `$el.addClass('className')` | 添加类名 | `$el.addClass('active')` | +| | `$el.removeClass('className')` | 移除类名 | `$el.removeClass('content')` | +| | `$el.css({k:v})` | 设置行内样式(支持多属性) | `$el.css({color:'red', fontSize:'16px'})` | +| 🗑️ DOM 删除 | `$el.remove()` | 删除自身及子节点(常用) | `$('.item').remove()` | +| | `$el.empty()` | 清空子节点(保留自身) | `$('#list').empty()` | +| 🎯 事件绑定 | `$el.click(fn)` | 绑定点击事件(快捷方式) | `$('#btn').click(()=>{/* 操作 */})` | +| | `$el.on('event', fn)` | 通用事件绑定(支持自定义事件) | `$el.on('change', handleChange)` | +| 🚪 入口函数 | `$(function(){})` | DOM 加载完成后执行代码(替代 window.onload) | `$(function(){ $('#btn').click() })` | \ No newline at end of file diff --git "a/\351\231\210\346\226\271\346\227\255/20251218\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251218\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..2d0c0780a87773d1b1b51a8e211f93578875a41c --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251218\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,13 @@ + + +## 异常处理及其动画效果 + +| jQuery 异常处理 | 1 | jQuery 对象.on ('click',function (){})) | +| --------------- | ---- | -------------------------------------------- | +| jQuery 异常处理 | 2 | jQuery 对象.click (function (){})) | +| jQuery 异常处理 | 3 | jQuery 对象.trigger ('click',function (){})) | +| jQuery 异常处理 | 4 | `$(function(){}))` | +| jQuery 动画 | 1 | 基础效果:隐藏、显示、show ()、hide () | +| jQuery 动画 | 2 | 进阶效果:淡出、淡入、fadeIn ()、fadeOut () | +| jQuery 动画 | 3 | 高级效果:animate () | + diff --git "a/\351\231\210\346\226\271\346\227\255/20251219\347\254\224\350\256\260+\347\273\203\344\271\240.md" "b/\351\231\210\346\226\271\346\227\255/20251219\347\254\224\350\256\260+\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..10ca1eed19083a416e285d174a2d26d1d9a409da --- /dev/null +++ "b/\351\231\210\346\226\271\346\227\255/20251219\347\254\224\350\256\260+\347\273\203\344\271\240.md" @@ -0,0 +1,21 @@ + + +## Form对象 + +### js访问表单 + +1. document.forms[] 按编号进行访问 +2. document.formname 按名称进行访问 +3. document.getElementById("") 定位访问表单 + +### Form对象的属性,方法与事件 + +| 属性 | 说明 | +| -------- | ---------------------------------------------------- | +| name | 返回或设置表单的名称 | +| action | 返回或设置表单提交的URL | +| method | 返回或设置表单提交的方式,可取值为get或post | +| encoding | 返回或设置表单信息提交的编码方式 | +| id | 返回或设置表单的id | +| target | 返回或设置提交表单时目标窗口的打开方式 | +| elements | 返回表单对象中的元素构成的数组,数组中的元素也是对象 | \ No newline at end of file diff --git a/readme.md "b/\351\231\210\346\226\271\346\227\255/readme.md" similarity index 100% rename from readme.md rename to "\351\231\210\346\226\271\346\227\255/readme.md"