note_17:恶补javascript基础_1

恶补javascript基础_1


参考

  • 课件
  • 官网:JSHint
  • 官网:JS Bin
  • 官网:w3school
  • 火狐开发文档:typeof
  • 博客园:JavaScript三种弹出框(alert,confirm和prompt)用法举例
  • 百度知道:js的正则表达式的正则前瞻(?=)和非捕获性分组(?:)有什么区别?
  • 菜鸟教程:HTML DOM元素对象
  • 博客园:关于HTML(含HTML5)的块级元素和行级(内联)元素总结
  • 简书:图解BOM与DOM的区别与联系
  • 博客园:我所理解的ECMAScript、DOM、BOM—写给新手们
  • 博客园:彻底理解js中this的指向,不必硬背。
  • csdn:JavaScript之childNodes 和 children 区别
  • 博客园:JS之event flow
  • segment fault:深入理解js Dom事件机制(一)——事件流
  • 博客园:JS邮箱验证-正则验证
  • 博客园:js中, 用变量或对象作为if或其他条件的表达式
  • csdn:getElementsByClassName()不能添加事件监听
  • csdn:js如何判断数组是Array类型

文章目录

  • 恶补javascript基础_1
    • 1. 链接到html文件里
      • (1)css文件
      • (2)javascript文件
    • 2. 编译运行
      • (1)检查风格
      • (2)运行代码
    • 3. 基础语法
      • (1)注释
      • (2)弹窗
      • (3)部分变量和类型
        • ① Number对象
        • ② Math对象
        • ③ String对象
        • ④ Boolean对象
        • ⑤ Array对象
        • ⑥ 全局对象
        • ⑦ RegExp对象
    • 4. DOM
      • (1)什么是DOM?
      • (2)什么是HTML DOM?
      • (3)什么是DOM元素
      • (4)如何修改DOM元素?
        • ① 注意区分innerHTML和textContent
        • ② value属性
      • (5)HTML DOM Tree
        • ① 节点父、子和同胞
        • ② 选择DOM元素
        • ③ 改变结构
      • (6)BOM和DOM
        • ① window对象
        • ② document对象
        • ③ location对象
        • ④ navigator对象
        • ⑤ screen对象
        • ⑥ history对象
      • (7)DOM Event对象
        • ① event
        • ② this
        • ③ add event handlers/listeners
        • ④ 事件流
        • ⑤ 标准event方法


对,没有意外,我又忘了很多javascript的基础知识,所以需要恶补。


1. 链接到html文件里

javascript由三部分组成:ECMAScript语法、DOM和BOM。

要放在html文件的里面

(1)css文件

<link rel="stylesheet" text="text/css" href="filename.css" />

(2)javascript文件

<script type="text/javascript" src="filename.js">script>

2. 编译运行

(1)检查风格

  • JSHint
  • 尤其是检查分号,还有0和等于

(2)运行代码

  • JS Bin
  • chrome的console

3. 基础语法

(1)注释

javascript

/* 这里写注释 */
var a = 0;
// 这里写注释
var b = 1;

html


<div>titlediv>

css

/* 这里写注释 */
body{text-align: center;
}

(2)弹窗

alert()方法:用于显示带有一条指定消息和一个 OK 按钮的警告框。

alert("message");
  • 图片来源:JavaScript三种弹出框(alert,confirm和prompt)用法举例
    在这里插入图片描述

confirm()方法:用于显示一个带有指定消息和 OK 及取消按钮的对话框。

confirm("message");
  • 图片来源:JavaScript三种弹出框(alert,confirm和prompt)用法举例
    在这里插入图片描述

prompt()方法:用于显示可提示用户进行输入的对话框。

prompt("message");
  • 图片来源:JavaScript三种弹出框(alert,confirm和prompt)用法举例
    在这里插入图片描述

(3)部分变量和类型

声明

var name = expression;

查看是哪种类型,输出字符串,而且是小写

var a = 0;
console.log(typeof a); // 输出"number"

typeof()的返回值
在这里插入图片描述

① Number对象

部分属性

Number.MAX_VALUE           // 系统可表示的最大数
Number.MIN_VALUE           // 系统可表示的最小数,接近0,但不是负数
NaN                        // 代表非数字值的特殊值
Number.NEGATIVE_INFINITY   // 负无穷大
Number.POSITIVE_INFINITY   // 正无穷大

部分方法

var a = new Number(0);
a.toString([radix])          // 把数字转换为字符串,使用指定的基数
a.toLocaleString()           // 把数字转换为字符串,使用本地数字格式顺序
a.toFixed(num)               // 把数字转换为字符串,结果的小数点后有指定位数的数字
a.toPrecision(num)           // 在对象的值超出指定位数时将其转换为指数计数法
a.valueOf()                  // 以字符串返回数字
② Math对象

部分属性

Math.E                     // 自然对数的底数e
Math.PI                    // 圆周率pai

部分方法

Math.abs(x)                     // 绝对值
Math.ceil(x)                    // 向上取整
Math.floor(x)                   // 向下取整
Math.sin(x)                     // 正弦
Math.cos(x)                     // 余弦
Math.tan(x)                     // 正切
Math.max([x, y, ...])           // 最大值
Math.min([x, y, ...])           // 最小值
Math.pow(x, y)                  // x的y次方
Math.random()                   // 生成0~1之间的随机数
Math.sqrt(x)                    // 开方
Math.round(x)                   // 四舍五入
Math.log(x)                     // lnx
③ String对象

部分属性

length                          // 字符串长度

部分方法

var a = new String("abc");
a.charAt(index)                               // 返回指定位置的字符
a.concat(string1, [string2, ...])             // 连接两个或多个字符串
a.indexOf(searchValue, [fromIndex])           // 返回某个指定的字符串值在字符串中首次出现的位置,fromIndex是字符串开始检索的位置
a.lastIndexOf(searchValue, fromIndex)         // 返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后面向前搜索
a.slice(start, end)                           // 提取字符串的某个部分,并以新的字符串返回被提取的部分
a.split(seperator, [howmany])                 // 把一个字符串分割成字符串数组,howmany指定返回数组的最大长度
a.substr(start, [length])                     // 在字符串中抽取从start下标开始的指定数组木的字符
a.substring(start, [stop])                    // 提取字符串中介于两个指定下标之间的字符
a.toLowerCase()                               // 将字符串变小写
a.toUpperCase()                               // 将字符串变大写

注意:javascript字符串不可改变!一经产生,字符串本身的值就再也不会发生改变。变量赋值为字符串后,除非重新赋值,其值不变。

var a = "hello";
a[0] = "w";
console.log(a);  // 输出"hello"
④ Boolean对象

真值和假值

  • “falsey” value,假值:0,0.0,NaN,"",null,undefined
  • “truthy” value,真值:除假值以外的值,包括"0",[]

小心=====

  • ==不要求数据类型相同,系统会自动做数据类型转换来比较
  • ===要求的是连数据类型都要相同,同理!==要求的是连类型都不能相同
console.log(10 < "42");    // true
console.log(10 !== "42");  // true
console.log("5.0" == 5);   // true
console.log(5.0 === 5);    // true
console.log("5.0" === 5);  // false/* 0只能跟0,0.0,false,空字符串等 */
console.log(0 == false);        // true
console.log(0 == undefined);    // false
console.log(0 == "");           // true
console.log(0 == null);         // false
console.log(0 == NaN);          // false/* false只能跟0,0.0,false和空字符串等 */
console.log(false == false);        // true
console.log(false == undefined);    // false
console.log(false == null);         // false
console.log(false == NaN);          // false
console.log(false == "");           // true/* undefined只能跟undefined和null等 */
console.log(undefined == undefined);    // true
console.log(undefined == NaN);          // false
console.log(undefined == null);         // true/* null只能跟null和undefined等 */
console.log(null == null);      // true
console.log(null == "");        // false
console.log(null == NaN);       // false/* NaN跟什么都不能等,包括NaN */
console.log(NaN == NaN);      // false
console.log(NaN === NaN);     // false

强制类型转换,将别的类型的值转换成布尔类型

var boolValue = Boolean(otherValue);
var boolValue = !!(otherValue);

以下来自网易云课堂web前端开发

// 题目来自网易云课堂,渡一教育,web前端开发,javascript
// 课时12,递归,预编译(下)var str = false + 1; // 因为=右边没有字符串,所以全部转成数字算,0+1=1
console.log(str); // 1var demo = false == 1; // false==1为假,所以demo就是false
console.log(demo); // false// a虽然没有声明,但是typeof还是可以有的,为"undefined"(是个字符串)
// -true是指-1,+true是指1,-false是指0,+false是指0,+undefined是指NaN,-undefined是指NaN
// "undefined"&&(-1) = -1,这时"undefined"会转成1,-1 + NaN = NaN
if (typeof(a)&&-true + (+undefined) + "") { // NaN + "" = "NaN"(转换成true)console.log("基础扎实"); // "基础扎实"
}// 先算乘法,除了+以外,其他的-、+、/都是把字符串转成数字算,最后返回的结果都是数字
if (11 + "11" * 2 == 33) { // 11 + 22 == 33 (true)console.log("基础扎实");
}// !!相当于转换成boolean类型
// !!" " = true, !!"" = false, !!false = false
// true + false - false = 1 + 0 - 0 = 1 (true)
// 1 || 任何东西 = 1
!!" " + !!"" - !!false||console.log("不能打印"); // 不会打印,因为||前面已经是1了

if (condition) {...},condition里面有时会出现隐式类型转换,具体怎么判断,参考js中, 用变量或对象作为if或其他条件的表达式

⑤ Array对象

部分属性

var arr = new Array(1, 2);
a.length               // 设置或返回数组中元素的数目

部分方法

var arr = new Array(1, 2);
arr.concat(array1, [array2, ...]);                  // 连接两个或多个数组
arr.join([seperator]);                              // 把数组中的所有元素放入一个字符串,元素是通过制定的分隔符进行分隔的
arr.pop();                                          // 用于删除并返回数组的最后一个元素
arr.push(element1, [element2, ...]);                // 向数组的末尾添加一个或多个元素,并返回新的长度
arr.reverse();                                      // 颠倒数组中元素的顺序
arr.shift();                                        // 把数组的第一个元素从其中删除,并返回第一个元素的值
arr.slice(start, [end]);                            // 从已有的数组中返回选定的元素
arr.sort([sortby]);                                 // 对数组中的元素进行排序,sortby是一个函数,规定排序顺序
arr.splice(index, howmany, [item1, item2, ...]);    // 向/从数组中添加/删除项目,然后返回被删除的项目。// index是个整数,规定添加/删除项目的位置。// howmany也是整数,表示要删除的项目数量。// item1,item2,...是向数组添加的新项目。
arr.toString();                                     // 将数组转换为字符串,元素之间用逗号分隔,并返回结果。
arr.unshift(element1, [element2, ...]);             // 向数组的开头添加一个或更多元素,并返回新的长度

声明数组

var arr = [];
arr[0] = 1;
arr[1] = 2;var arr = [1, 2];var arr = new Array();// 当单个的数字(Number)传递给Array()构造函数时,将会被解释为数组长度,并非单个元素。
var arr = new Array(2);    // 这里的2是指数组的长度size,不是数据var arr = new Array(1, 2); // 声明一个数组,里面包含1和2两个数

判断数组是不是Array的方法

// 1. instanceof
arr instanceof Array ? alert("true") : alert("false");// 2. constructor
[].constructor == Array ? alert("true") : alert("false");// 3. Object.prototype.toString.call(arr) === '[object Array]'
Object.prototype.toString.call(arr) == "[object Array]" ? alert("true") : alert("false");// 4. ES5定义了Array.isArray
alert(Array.isArray(arr));
⑥ 全局对象

部分函数

isNaN();                    // 检查某个值是否是数字
parseFloat(string);         // 解析一个字符串,返回一个浮点数。// 如果字符串的第一个字符不能被转换为数字,则该函数会返回NaN。// 如果在解析成浮点数的过程中遇到了不是正负号、数字、小数点,或者科学计数法中的指数的字符,// 则解析会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。// 同时参数字符串开头和结尾的空格是允许的。
parseInt(string, [radix]);  // 解析一个字符串,并返回一个整数。// radix表示要解析的数字的基数(多少进制),介于2~36之间。默认为10。// 如果string是以"0x"开头,则会把string的其余部分解析为十六进制的整数。// 如果string以0开头,则会把string其余部分解析为八进制的整数。
Number(object);             // 将对象的值转换为数字
String(object);             // 将对象的值转换为字符串

例,

console.log(parseInt(3, 8));  // 3// 将传进去的"3"当成是8进制的3,然后转成10进制的数字3
console.log(parseInt(3, 2));  // NaN// 因为2进制里面没有3,所以转不成数字
console.log(parseInt(3, 0));  // 3// 如果radix设置为0或者不写,就默认成"3"是10进制// 所以10进制转成10进制,还是10进制3
⑦ RegExp对象
  • 表示正则表达式,对字符串执行模式匹配的强大工具。

创建RegExp对象:

// pattern是一个字符串,指定了正则表达式的模式或其他正则表达式。
// attributes是一个可选的字符串,包含属性"g"、"i"和"m",
// 分别用于指定全局匹配、区分大小写的匹配和多行匹配。
// 如果pattern是正则表达式,而不是字符串,则必须省略该参数。
var patt = /pattern/attributes; // 直接量语法
var patt = new RegExp(pattern, attributes); // 创建RegExp对象的语法

修饰符:

var patt = /pattern/i;    // i指执行对大小写不敏感的匹配
var patt = /pattern/g;    // g指执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
var patt = /pattern/m;    // m指执行多行匹配

方括号:

var patt = /[abc]/;    // 查找方括号之间的任何字符
var patt = /[^abc]/;   // 查找任何不在方括号之间的字符
var patt = /[0-9]/;    // 查找任何从0到9的数字
var patt = /[a-z]/;    // 查找任何从小写a到小写z的字符
var patt = /[A-Z]/;    // 查找任何从大写A到大写Z的字符
var patt = /[adgk]/;   // 查找给定集合内的任何字符
var patt = /[^adgk]/;  // 查找给定集合外的任何字符
var patt = /(red|blue|green)/;  // 查找任何指定的选项

部分元字符:

var patt = /pattern./;       // .指查找单个字符,除了换行和行结束符
var patt = /\w/;             // \w指查找单词字符
var patt = /\W/;             // \W指查找非单词字符
var patt = /\d/;             // \d指查找数字
var patt = /\D/;             // \D指查找非数字字符
var patt = /\s/;             // \s指查找空白字符
var patt = /\S/;             // \S指查找非空白字符
var patt = /\bpattern/;      // \b指匹配单词边界
var patt = /\Bpattern/;      // \B指匹配非单词边界
var patt = /\n/;             // \n指换行符

部分量词:

var patt = /n+/;       // 匹配任何包含至少一个n的字符串
var patt = /n*/;       // 匹配任何包含零个或多个n的字符串
var patt = /n?/;       // 匹配任何包含零个或一个n的字符串
var patt = /n{X}/;     // 匹配包含X个n的序列的字符串
var patt = /n{X, Y}/;  // 匹配包含X至Y个n的序列的字符串
var patt = /n{X, }/;   // 匹配包含至少X个n的序列的字符串
var patt = /n$/;       // 匹配任何结尾为n的字符串
var patt = /^n/;       // 匹配任何开头为n的字符串
var patt = /?=n/;      // 匹配任何其后紧接指定字符串n的字符串
var patt = /?!n/;      // 匹配任何其后没有紧接指定字符串n的字符串

例,正则表达式验证表单

// 验证邮箱
// ^\w表示以单词字符开头:a-z、A-Z、0-9、下划线
// +表示一个或多个字符
// @就是邮箱地址中间的at,紧跟@后面的是域名
// 长度为2-10的由大小写字母或者数字组成的字符串
// (?:)作为匹配校验,并出现在匹配结果字符里面
// \.,dot(.)转义字符,否则会被识别成元字符
// 长度为2-4的由小写字母组成的字符串
// (?:){1,3}$表示以长度为1-3由前面那个匹配校验字符串组成的字符串结尾
function testEmail(str) {var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;return reg.test(str);
}// 检验电话号码格式
// 可能是11-12位电话号码(带区号),也可能是11位手机号码,所以用|(或)
// 区号第一位一定是0,区号可以是3位或者4位
// 区号后面要写-符号连接电话号码
// 手机号一定是1开头的,然后是表示电话运营商号码
function testTelNo(str) {var reg = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;return reg.test(str);
}// 检验是否由中文名称组成
// \u是指16进制的Unicode
// {2-4}代表长度
function testChinese(str) {var reg = /^[\u4E00-\u9FA5]{2,4}$/;return reg.test(str);
}// 是否带有小数
function testDecimal(str) {var reg = /^\d+\.\d+$/;return reg.test(str);
}

4. DOM

(1)什么是DOM?

w3school上的描述:

DOM是Document Object Model(文档对象模型)的缩写,它是W3C(万维网联盟)的标准,定义了访问HTML和XML文档的标准:“W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。”

W3C DOM标准被分为3个不同的部分:

  1. 核心DOM——针对任何结构化文档的标准模型
  2. XML DOM——针对XML文档的标准模型
  3. HTML DOM——针对HTML文档的标准模型

(2)什么是HTML DOM?

HTML DOM是:

  1. HTML的标准对象模型
  2. HTML的标准编程接口
  3. W3C标准

HTML DOM定义了所有HTML元素的对象属性,以及访问它们的方法
HTML DOM是关于如何获取、修改、添加或删除HTML元素的标准。

(3)什么是DOM元素

根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点:

  1. 整个文档是一个文档节点
  2. 每个HTML元素是元素节点
  3. HTML元素内的文本是文本节点
  4. 每个HTML属性是属性节点
  5. 注释是注释节点

通过HTML DOM,树种的所有节点均可通过javascript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。

(4)如何修改DOM元素?

NodeList对象代表了节点列表,类似HTML元素的子节点集合。
访问或者修改DOM对象的属性可以通过修改objectName.attributeName = newValue。

部分属性和方法:

element.getAttribute(attributeName);                    // 通过名称获取属性的值
element.setAttribute(attributeName, attributeValue);    // 创建或改变某个新属性。如果指定属性已经存在,则只设置该值。
element.innerHTML = text;                               // 设置或返回表格行的开始和结束标签之间的HTML
element.textContent = text;                             // 设置或者返回指定节点的文本内容
① 注意区分innerHTML和textContent
  • innerHTML返回的是html,textContent返回的是文本内容。
  • innerHTML返回的内容会包含html的标签,但是textContent不会

来自课件上的一个例子:


<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>JS Bintitle>head><body><div id="example"><p>文本内容1p><p>文本内容2p>div><br /><button onclick="changeTextContent();">改变textContentbutton><br /><br /><button onclick="changeInnerHTML();">改变innerHTMLbutton><script>window.onload = function() {var example = document.getElementById("example");console.log(example.textContent);console.log(example.innerHTML);changeTextContent = function() {example.textContent = "

新文本内容

"
;}changeInnerHTML = function() {example.innerHTML = "

新文本内容

"
;}}
script>body> html>

console的显示:

  • 第一个字符串就是textContent的内容
  • 第二个字符串就是innerHTML的内容

在这里插入图片描述
Output的显示:

一开始什么都没动时
在这里插入图片描述
点击改变textContent
在这里插入图片描述

  • 这里的

    并不是作为html的标签,而是单纯的字符串
  • 如果这时输出example.innerHTML,会得到"<p>新文本内容</p>",输出为了说明是文本,所以特意用了转义字符。
changeTextContent = function() {example.textContent = "

新文本内容

"
;// console.log(example.innerHTML); }

点击改变innerHTML
在这里插入图片描述

  • 这里的

    就是作为html的标签
  • 如果这时输出example.innerHTML,会得到"

    新文本内容

    "
    ,并没有用转义字符表示

    ,因为它们是作为标签存在,而不是文本。
changeInnerHTML = function() {example.innerHTML = "

新文本内容

"
;// console.log(example.innerHTML); }
② value属性

以下内容来自课件

value属性与网页内容
对于一些由value属性定义其显示内容的HTML元素,例如:文本框、各种按钮等,不能使用textContent和innerHTML,而应该通过其DOM元素的value property来获取、改变其显示的内容。

(5)HTML DOM Tree

在这里插入图片描述

DOM节点:

  1. 文档节点
  2. 元素节点
  3. 文本节点
  4. 属性节点
  5. 注释节点
① 节点父、子和同胞

节点树种的节点彼此拥有层级关系。父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

在节点树中,顶端节点被称为根(root)
每个节点都有父节点、除了根(它没有父节点)
一个节点可拥有任意数量的子
同胞是拥有相同父节点的节点

在这里插入图片描述
来自w3school的一段代码

<html><head><title>DOM 教程title>head><body><h1>DOM 第一课h1><p>Hello world!p>body>
html>

从上面的HTML中:

  • 节点没有父节点;它是根节点
  • 的父节点是节点
  • 文本节点"Hello world!"的父节点是

    节点

并且:

  • 节点拥有两个子节点:
  • 节点拥有一个子节点:</code>节点</li><li><code><title></code>节点也拥有一个子节点:<strong>文本节点</strong>“DOM 教程”</li><li><code><h1></code>和<code><p></code>节点是<strong>同胞节点</strong>,同时也是<code><body></code>的子节点</li></ul> <p>并且:</p> <ul><li><code><head></code>元素是<code><html></code>元素的<strong>首个子节点</strong></li><li><code><body></code>元素是<code><html></code>元素的<strong>最后一个子节点</strong></li><li><code><h1></code>元素是<code><body></code>元素的<strong>首个子节点</strong></li><li><code><p></code>元素是<code><body></code>元素的<strong>最后一个子节点</strong></li></ul> <p>部分DOM节点属性</p> <pre><code class="prism language-javascript">element<span class="token punctuation">.</span>nodeName <span class="token comment">// 返回节点名(大写),元素节点名为HTML标签名,文本节点是“#text”,文档节点是“#document”</span> element<span class="token punctuation">.</span>nodeValue <span class="token comment">// 返回节点值,元素节点值为null,属性节点值为HTML属性值,文本节点值为文本内容</span> element<span class="token punctuation">.</span>nodeType <span class="token comment">// 返回节点类型,元素节点为1,属性节点为2,文本节点为3,文档节点为9,注释节点为8</span> element<span class="token punctuation">.</span>parentNode <span class="token comment">// 父节点</span> element<span class="token punctuation">.</span>previousSibling <span class="token comment">// 前一个兄弟节点</span> element<span class="token punctuation">.</span>nextSibling <span class="token comment">// 后一个兄弟节点</span> element<span class="token punctuation">.</span>firstChild <span class="token comment">// 第一个子节点</span> element<span class="token punctuation">.</span>lastChild <span class="token comment">// 最后一个子节点</span> element<span class="token punctuation">.</span>childNodes <span class="token comment">// 子节点数组</span> element<span class="token punctuation">.</span>children <span class="token comment">// 子元素的集合,是一个HTMLCollection对象</span> </code></pre> <p>childNode和children的区别:</p> <ul><li>childNode返回所有的节点,包括文本节点、注释节点。</li><li>children只返回元素节点。</li></ul> <p><strong>小心childNode:要算上文本部分的换行和空白</strong></p> <p>例1,这里<code></p></code>和<code><\a></code>之间有个换行<code>\n</code>要算为childNode,因为它属于文本节点</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>DOM树<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.abc.com/<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>aaa<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> </code></pre> <p>例2,<code>.list</code>的5个子节点:<code><ul></code>和<code><li></code>之间的空白,<code><li></code>到<code></li></code>之间的内容包括这对标签,<code></li></code>和<code><li></code>之间的空白,<code><li></code>和<code></li></code>之间的内容包括这对标签,<code></li></code>和<code></ul></code>之间的空白。</p> <pre><code class="prism language-html"><span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>width=device-width<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>JS Bin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>list<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span>aa<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span>bb<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script language-javascript"><span class="token keyword">var</span> list <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"list"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span>childNodes<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span><span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> list<span class="token punctuation">.</span>childNodes<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span>childNodes<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nodeType<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3 1 3 1 3</span><span class="token punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>例3,<code>.list</code>的4个子节点,比上面少了1个,因为<code><ul></code>和<code><li></code>之间的空白没了,也就是那个文本节点没了。</p> <pre><code class="prism language-html"><span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>width=device-width<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>JS Bin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>list<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span>aa<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span>bb<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script language-javascript"><span class="token keyword">var</span> list <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"list"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span>childNodes<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 4</span><span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> list<span class="token punctuation">.</span>childNodes<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span>childNodes<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nodeType<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1 3 1 3</span><span class="token punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p><em>插播</em></p> <ul><li>列举几个常见块级元素:<code></code>,<code><h1></code>,<code><p></code>,<code><ul></code>,<code><li></code>。</li><li>列举几个常见行内元素:<code><span></code>,<code><button></code>,<code><input></code>,<code><img></code>,<code><textarea></code>。</li><li>详情看关于HTML(含HTML5)的块级元素和行级(内联)元素总结</li></ul> <h5><a id="_DOM_735"></a>② 选择DOM元素</h5> <p>部分方法</p> <pre><code class="prism language-html">element.getElementById(id) // 返回id属性为给定的DOM元素 element.getElementsByTagName(tagName) // 返回给定标签名对应的所有DOM元素 element.getElementsByClassName(className) // 返回给定类名对应的所有DOM元素 element.getElementsByName(name) // 返回给定name属性对应的所有DOM元素 </code></pre> <p>因为id是唯一的,所以是get<strong>Element</strong>ById(),没有<strong>s</strong>。<br /> 因为className和TagName都是可重复的,所以获取到的元素可能不止一个,因此是get<strong>Elements</strong>ByClassName()和get<strong>Elements</strong>ByTagName()。</p> <h5><a id="__747"></a>③ 改变结构</h5> <p>部分方法</p> <pre><code class="prism language-javascript">element<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>node<span class="token punctuation">)</span> <span class="token comment">// 将node附加成为当前结点的子节点,成为其lastChild</span> element<span class="token punctuation">.</span><span class="token function">insertBefore</span><span class="token punctuation">(</span><span class="token keyword">new</span><span class="token punctuation">,</span> old<span class="token punctuation">)</span> <span class="token comment">// 将new插入成为当前节点的子节点,为old节点的previousSibling</span> element<span class="token punctuation">.</span><span class="token function">removeChild</span><span class="token punctuation">(</span>node<span class="token punctuation">)</span> <span class="token comment">// 从当前节点的子节点当中删除node</span> element<span class="token punctuation">.</span><span class="token function">replaceChild</span><span class="token punctuation">(</span><span class="token keyword">new</span><span class="token punctuation">,</span> old<span class="token punctuation">)</span> <span class="token comment">// 将当前节点的old子节点,替换为new</span> </code></pre> <p>新建了一个节点,如果它没被插入到当前的DOM tree里面,是看不到变化的。</p> <h4><a id="6BOMDOM_758"></a>(6)BOM和DOM</h4> <p>BOM对象:</p> <blockquote> <p>BOM即浏览器对象模型,BOM没有相关标准,BOM的最核心是window对象。window对象既为javascript访问浏览器提供API,同时在ECMAScript中充当Global对象。BOM和浏览器关系密切,浏览器很多东西可以通过javascript来控制,例如打开窗口、打开选项卡、关闭页面、收藏夹等。这些功能与网页内容无关。由于没有标准,不同的浏览器实现同一功能,可以通过不同的实现方式。虽然没有统一标准,但是各个浏览器的常用功能的js代码大同小异,对于常用的功能已经有默认的标准了。</p> </blockquote> <table><thead><tr><th>对象名</th><th>描述</th></tr></thead><tbody><tr><td>window</td><td>浏览器用于显示页面的窗口</td></tr><tr><td>document</td><td>浏览器窗口内当前的网页,DOM树的根(既是BOM成员,又是DOM成员)</td></tr><tr><td>location</td><td>当前网页的URL</td></tr><tr><td>navigator</td><td>浏览器本身</td></tr><tr><td>screen</td><td>浏览器当前占据的屏幕区域</td></tr><tr><td>history</td><td>浏览器用户访问历史</td></tr></tbody></table> <p><img referrerpolicy="no-referrer" src="https://upload-images.jianshu.io/upload_images/7166236-ac9c88e8fc0cb3c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/842/format/webp" alt="在这里插入图片描述" /></p> <h5><a id="_window_772"></a>① window对象</h5> <p>部分方法:</p> <pre><code class="prism language-javascript"><span class="token function">alert</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> <span class="token comment">// 显示带有一段消息和一个确认按钮的警告框</span> <span class="token function">confirm</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> <span class="token comment">// 显示带有一段消息以及确认按钮和取消按钮的对话框</span> <span class="token function">prompt</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> <span class="token comment">// 显示可提示用户输入的对话框</span> <span class="token function">setInterval</span><span class="token punctuation">(</span>code<span class="token punctuation">,</span> millisec<span class="token punctuation">)</span> <span class="token comment">// 按照指定的周期(以毫秒计)来调用函数或计算表达式</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span>code<span class="token punctuation">,</span> millisec<span class="token punctuation">)</span> <span class="token comment">// setTimeout()只执行codeyici,</span><span class="token comment">// 如果要多次调用,要使用setInterval()或者让code自身再次调用setTimeout()</span> <span class="token function">clearInterval</span><span class="token punctuation">(</span>id_of_setinterval<span class="token punctuation">)</span> <span class="token comment">// 取消setInterval()设置的timeout</span><span class="token comment">// id_of_setinterval是由setInterval()返回的ID值 </span> <span class="token function">clearTimeout</span><span class="token punctuation">(</span>id_of_settimeout<span class="token punctuation">)</span> <span class="token comment">// 取消setTimeout()设置的timeout</span><span class="token comment">// id_of_settimeout是由setTimeout()返回的ID值</span><span class="token comment">// 该值标识要取消的延迟执行代码块</span> window<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token constant">URL</span><span class="token punctuation">,</span> name<span class="token punctuation">,</span> features<span class="token punctuation">,</span> replace<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// 用于打开一个新的浏览器窗口或查找一个已命名的窗口</span><span class="token comment">// URL声明了要在新窗口中显示的文档的URL,如果不填或者填空字符串,那么新窗口不会显示任何文档</span><span class="token comment">// name是一个由逗号分隔的特征列表,声明了新窗口的名称。</span><span class="token comment">// 如果该参数指定了一个已经存在的窗口,那么open()方法就不再创建一个新窗口,而只是返回对指定窗口的引用。</span><span class="token comment">// 在这种情况下,features将被忽略。</span><span class="token comment">// features声明了新窗口要显示的标准浏览器的特征。</span><span class="token comment">// 如果省略了该参数,新窗口将具有所有标准特征。</span><span class="token comment">// replace规定了装载到窗口的URL是在窗口的浏览历史中创建一个新条目(true),还是替换浏览历史中的当前条目(false)</span> window<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 关闭有window指定的顶层浏览器窗口</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 打印当前窗口的内容</span> windows<span class="token punctuation">.</span><span class="token function">focus</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 把键盘焦点给予一个窗口</span> windows<span class="token punctuation">.</span><span class="token function">blur</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 把键盘焦点从顶层窗口移开</span> <span class="token function">scrollBy</span><span class="token punctuation">(</span>xnum<span class="token punctuation">,</span> ynum<span class="token punctuation">)</span> <span class="token comment">// 把内容滚动指定的像素数</span> <span class="token function">scrollTo</span><span class="token punctuation">(</span>xpos<span class="token punctuation">,</span> ypos<span class="token punctuation">)</span> <span class="token comment">// 把内容滚动到指定的坐标 </span> </code></pre> <p><strong>Window.open()和Document.open()的功能不一样,所以最好写Window.open。</strong></p> <p>窗口特征features</p> <h5><a id="_document_806"></a>② document对象</h5> <p>部分属性:</p> <pre><code class="prism language-javascript">document<span class="token punctuation">.</span>cookie <span class="token comment">// 当前网页有效的所有cookie,以名值对的形式返回</span><span class="token comment">// 可以对cookie进行读取、创建、修改和删除</span> document<span class="token punctuation">.</span>domain <span class="token comment">// 提供当前网页的web服务器域名</span> document<span class="token punctuation">.</span>referrer <span class="token comment">// 前一个网页,用户从那里点击链接访问了当前网页</span> document<span class="token punctuation">.</span>title <span class="token comment">// 当前网页的title</span> document<span class="token punctuation">.</span><span class="token constant">URL</span> <span class="token comment">// 返回当前文档的URL</span> </code></pre> <p>部分方法:</p> <pre><code class="prism language-javascript">document<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token punctuation">[</span>mimetype<span class="token punctuation">,</span> replace<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// 打开输出流,准备写入文档内容</span> document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>exp1<span class="token punctuation">,</span>exp2<span class="token punctuation">,</span><span class="token operator">...</span><span class="token punctuation">)</span> <span class="token comment">// 在输出流中写入网页内容</span> document<span class="token punctuation">.</span><span class="token function">writeln</span><span class="token punctuation">(</span>exp1<span class="token punctuation">,</span> exp2<span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span> <span class="token comment">// 在输出流当中写入网页内容,每次一行</span> document<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 关闭当前输出流,将其内容显示到浏览器窗口中</span> </code></pre> <p><strong>调用open()方法打开一个新文档并且用write()方法设置文档内容后,必须记住用close()关闭文档,并迫使其内容显示出来。</strong></p> <h5><a id="_location_827"></a>③ location对象</h5> <p>部分方法:</p> <pre><code class="prism language-javascript">location<span class="token punctuation">.</span><span class="token function">reload</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 向服务器重新请求当前网页</span> location<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span> <span class="token comment">// 在当前窗口(标签页)打开给定的网页(url)</span> location<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span> <span class="token comment">// 与assign相同,在当前窗口(标签页)打开给定的网页(url)</span> </code></pre> <h5><a id="_navigator_835"></a>④ navigator对象</h5> <p>部分属性:</p> <pre><code class="prism language-javascript">navigator<span class="token punctuation">.</span>appCodeName <span class="token comment">// 浏览器的代码名称</span> navigator<span class="token punctuation">.</span>appName <span class="token comment">// 浏览器名</span> navigator<span class="token punctuation">.</span>appVersion <span class="token comment">// 浏览器版本</span> navigator<span class="token punctuation">.</span>cookieEnabled <span class="token comment">// 是否支持cookie</span> navigator<span class="token punctuation">.</span>platform <span class="token comment">// 浏览器是在什么平台下编译的</span> navigator<span class="token punctuation">.</span>userAgent <span class="token comment">// 浏览器在和web服务器通信时,HTTP(s)报文头部user-agent字段的值</span> </code></pre> <h5><a id="_screen_846"></a>⑤ screen对象</h5> <p>部分属性:</p> <pre><code class="prism language-javascript">screen<span class="token punctuation">.</span>availHeight <span class="token comment">// 用户屏幕的高度(不包括Windows的任务栏)</span> screen<span class="token punctuation">.</span>availWidth <span class="token comment">// 用户屏幕的宽度(不包括Windows的任务栏)</span> screen<span class="token punctuation">.</span>height <span class="token comment">// 用户屏幕的整个高度(包括Windows的任务栏)</span> screen<span class="token punctuation">.</span>width <span class="token comment">// 用户屏幕的整个宽度(包括Windows的任务栏)</span> screen<span class="token punctuation">.</span>colorDepth <span class="token comment">// 用户屏幕的颜色解析度,每个像素点使用多少位数字来表示</span> </code></pre> <h5><a id="_history_856"></a>⑥ history对象</h5> <p>部分属性:</p> <pre><code class="prism language-javascript">history<span class="token punctuation">.</span>length <span class="token comment">// 返回浏览器历史列表中的URL数量</span> </code></pre> <p>部分方法:</p> <pre><code class="prism language-javascript">history<span class="token punctuation">.</span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 在当前网页的访问历史列表上,返回访问上一个网页</span> history<span class="token punctuation">.</span><span class="token function">forward</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 在当前网页的访问历史列表上,返回访问下一个网页</span> history<span class="token punctuation">.</span><span class="token function">go</span><span class="token punctuation">(</span>step<span class="token punctuation">)</span> <span class="token comment">// 在当前网页的访问历史列表上,返回访问从当前网页起第step个网页,step为正数向前数,为负数向后倒退</span> </code></pre> <h4><a id="7DOM_Event_869"></a>(7)DOM Event对象</h4> <h5><a id="_event_870"></a>① event</h5> <p>部分属性:</p> <pre><code class="prism language-javascript">event<span class="token punctuation">.</span>type <span class="token comment">// 事件名称,例如点击事件'click','submit','load'</span> event<span class="token punctuation">.</span>target <span class="token comment">// 发生事件的DOM(BOM)元素</span> event<span class="token punctuation">.</span>currentTarget <span class="token comment">// 其事件处理器正在执行的DOM(BOM)元素</span> event<span class="token punctuation">.</span>Phase <span class="token comment">// 事件当前的阶段(capture、target、bubbling)</span> event<span class="token punctuation">.</span>altKey <span class="token comment">// 事件发生时,键盘上的“Alt”键是否被按下</span> event<span class="token punctuation">.</span>ctrlKey <span class="token comment">// 事件发生时,键盘上的“Ctrl”键是否被按下</span> event<span class="token punctuation">.</span>shiftKey <span class="token comment">// 事件发生时,键盘上的“Shift”键是否被按下</span> event<span class="token punctuation">.</span>button <span class="token comment">// 事件发生时,用户鼠标哪个键被按下</span> event<span class="token punctuation">.</span>clientX <span class="token comment">// 事件发生时,鼠标在浏览器窗口的横坐标,浏览器左上角为原点</span> event<span class="token punctuation">.</span>clientY <span class="token comment">// 事件发生时,鼠标在浏览器窗口的纵坐标,浏览器左上角为原点</span> event<span class="token punctuation">.</span>screenX <span class="token comment">// 事件发生时,鼠标在屏幕上的横坐标,屏幕左上角为原点</span> event<span class="token punctuation">.</span>screenY <span class="token comment">// 事件发生时,鼠标在屏幕上的纵坐标,屏幕左上角为原点</span> </code></pre> <h5><a id="_this_887"></a>② this</h5> <p>可以参考这篇博客:彻底理解js中this的指向,不必硬背。</p> <p>主要由几种情况:</p> <ul><li>如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window。</li><li>如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。</li><li>如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。</li><li>this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的。</li><li>构造函数的new关键字可以改变this的指向,指向实例。</li><li>当new一个函数时,如果返回值是一个对象,那么this指向的就是那个返回的对象;如果返回值不是一个对象,那么this还是指向函数的实例。</li><li>如果返回值是null,那么this还是指向函数实例。</li></ul> <h5><a id="_add_event_handlerslisteners_900"></a>③ add event handlers/listeners</h5> <ul><li>给HTML元素添加时间处理器属性,事件处理器名称为“on事件名”</li></ul> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>button</span> <span class="token attr-name">onclick</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>alert(<span class="token punctuation">'</span>Hello world!<span class="token punctuation">'</span>)<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>button</span><span class="token punctuation">></span></span> </code></pre> <ul><li>给DOM元素事件处理器property赋值,事件处理器property名称为“on事件名”</li><li>详细的事件处理器表:事件句柄</li></ul> <pre><code class="prism language-javascript"><span class="token comment">// 匿名函数</span> button<span class="token punctuation">.</span><span class="token function-variable function">onclick</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'Hello world!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <ul><li>使用DOM元素的添加事件处理器方法<code>addEventListener</code>,第一个参数为事件名,第二个参数为事件处理器。</li></ul> <pre><code class="prism language-javascript">button<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'Hello world!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>添加/移除事件实例</p> <pre><code class="prism language-html"><span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>width=device-width<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>JS Bin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>button</span><span class="token punctuation">></span></span>变!<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>button</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script language-javascript">window<span class="token punctuation">.</span><span class="token function-variable function">onload</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token comment">// 如果想个集合里面每一个button都绑定事件的话,可以这样</span><span class="token comment">// var button = document.getElementsByTagName("button");</span><span class="token comment">// for (let i = 0; i < button.length; i++) { // 用let</span><span class="token comment">// button[i].onclick = function() {<!-- --></span><span class="token comment">// alert(this.textContent);</span><span class="token comment">// }</span><span class="token comment">// }</span><span class="token comment">// 或者这样</span><span class="token comment">// for (var i = 0; i < button.length; i++) {<!-- --></span><span class="token comment">// button[i].onclick = function(i) { // 传参</span><span class="token comment">// alert(this.textContent);</span><span class="token comment">// }</span><span class="token comment">// }</span><span class="token comment">// 要是又不用let,又不传参的话,就会绑定失败,因为丢失了对i的引用</span><span class="token comment">// 闭包里面常见的问题</span><span class="token keyword">var</span> button <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">"button"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 获取第0个按钮</span>button<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> showClickTimes<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 添加事件</span>button<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler1<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">var</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">function</span> <span class="token function">showClickTimes</span><span class="token punctuation">(</span>event<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">var</span> paragraph <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">"p"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>count<span class="token operator">++</span><span class="token punctuation">;</span>paragraph<span class="token punctuation">.</span>textContent <span class="token operator">=</span> <span class="token string">"第"</span> <span class="token operator">+</span> count <span class="token operator">+</span> <span class="token string">"次点击"</span><span class="token punctuation">;</span> <span class="token comment">// 修改<p></p>里面的内容</span><span class="token punctuation">}</span><span class="token keyword">function</span> <span class="token function">handler1</span><span class="token punctuation">(</span>event<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"handler1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>event<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">removeEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler1<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// event.target,发生事件的DOM元素</span>event<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">function</span> <span class="token function">handler2</span><span class="token punctuation">(</span>event<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"handler2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>event<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">removeEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler2<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 移除事件</span>event<span class="token punctuation">.</span>target<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler1<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <h5><a id="__983"></a>④ 事件流</h5> <blockquote> <p>HTML文档和DOM都是树型结构,因此当一个事件发生的时候,它既发生在当前元素上,也发生在当前元素的父元素和祖先元素上。</p> </blockquote> <p><img referrerpolicy="no-referrer" src="https://www.w3.org/TR/DOM-Level-3-Events/images/eventflow.svg" alt="在这里插入图片描述" /><br /> 标准模型的事件传播分为3个阶段:</p> <ul><li>捕捉阶段:事件发生后,从window对象沿着DOM树结构向目标节点传播。</li><li>目标阶段:发生在触发事件的节点本身,注册的事件处理程序(函数)会被执行。</li><li>冒泡阶段:事件从触发节点沿着DOM树结构传回window对象。</li></ul> <p>在标准模型中,所有事件的处理都可以在捕捉阶段进行,但并不是所有事件都可以在冒泡阶段进行处理。高级语义事件是不支持冒泡传播的。</p> <p>IE事件模型只支持冒泡形式的事件传播。</p> <p>详细看:深入理解js Dom事件机制(一)——事件流</p> <pre><code class="prism language-javascript">element<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 捕获阶段</span> element<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> handler<span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 冒泡阶段</span> </code></pre> <h5><a id="_event_1003"></a>⑤ 标准event方法</h5> <pre><code class="prism language-javascript">event<span class="token punctuation">.</span><span class="token function">initEvent</span><span class="token punctuation">(</span>eventType<span class="token punctuation">,</span> canBubble<span class="token punctuation">,</span> canelable<span class="token punctuation">)</span> <span class="token comment">// 初始化新事件对象的属性</span><span class="token comment">// cancelable表示是否可以用preventDefault()来取消事件</span> event<span class="token punctuation">.</span><span class="token function">preventDefault</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 取消事件的默认动作</span> event<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 终止事件在传播过程的捕获、目标处理或气泡阶段进一步传播。</span><span class="token comment">// 调用该方法后,该节点上处理该事件的处理承租将被调用,事件不再被分派到其他节点。</span> </code></pre> <hr /> <p><em>题外话</em><br /> 要是这次再垮,我都要难受死了。</p> <hr /> </p> <p><br /><pre><code style="font-size:16px;">本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击<a href="https://shimo.im/forms/N2A1gvJRpPh7K9qD/fill" target="_blank" rel="nofollow">【内容举报】</a>进行投诉反馈!</code></pre></p> <!-- E 正文 --> <link href="https://qiniu.techgrow.cn/readmore/dist/readmore.css" type="text/css" rel="stylesheet"> <script src="https://qiniu.techgrow.cn/readmore/dist/readmore.js" type="text/javascript"></script> <script> var regex = /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i var isMobile = navigator.userAgent.match(regex); if (!isMobile) { try { var plugin = new ReadmorePlugin(); plugin.init({ id: "readmore-container", blogId: "55721-7689706765131-406", name: "财经早读", keyword: "666", qrcode: "https://www.imspm.com/assets/img/caijingzaodu.jpg", type: "website", height: "auto", expires: "7", interval: "60", random: "1" }) } catch (e) { console.warn("readmore plugin occurred error: " + e.name + " | " + e.message); } } </script> </div> <!-- S 付费阅读 --> <!-- E 付费阅读 --> <!-- S 点赞 --> <div class="article-donate"> <a href="javascript:" class="btn btn-primary btn-like btn-lg social-share-icon icon-heart addbookbark" data-type="archives" data-aid="717066" data-action="/addons/cms/ajax/collection.html">收藏</a> </div> <!-- E 点赞 --> <div class="entry-meta"> <ul> <!-- S 归档 --> <li>标签:<a href="/dev.html" class="tag" rel="tag" target="_blank">技术</a></li> <!-- S 归档 --> </ul> <ul class="article-prevnext"> <!-- S 上一篇下一篇 --> <li> <span>上一篇 ></span> <a href="/dev/717065.html" target="_blank">自我介绍与规划</a> </li> <li> <span>下一篇 ></span> <a href="/dev/717067.html" target="_blank">Linux文件基础操作</a> </li> <!-- E 上一篇下一篇 --> </ul> </div> <div class="related-article"> <div class="row" style="margin: 0 -15px;"> <!-- S 相关文章 --> <div class="col-xs-12"> <h3 style="font-size: 1.1em;">相关文章</h5> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747938.html" target="_blank">Duilib中list控件支持ctrl和shif多行选中的实现</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747937.html" target="_blank">[ICML2015]Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shif</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747936.html" target="_blank">win10系统 微软输入法 于eclipse ctrl+shif+f冲突间接处理办法</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747935.html" target="_blank">Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shif</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747934.html" target="_blank">读LDD3,内存映射与DMA--PAGE_SHIF…</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747933.html" target="_blank">VMware虚拟机安装XP【要先分区,再设置BOOT 启动CD,shif+上移】</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747932.html" target="_blank">更换iBus五笔的左与右Shif</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747931.html" target="_blank">sublime ctrl+shif+f 没用解决办法</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747930.html" target="_blank">idea 对 ctrl + z 的撤销 是 ctrl + shif + z</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747929.html" target="_blank">计算机最早的设计师应用于,计算机应用基础选择题doc.doc</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747928.html" target="_blank">win10自带截图神器:Win+Shift+S</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747927.html" target="_blank">Python基础之文件目录操作</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747926.html" target="_blank">python简述目录_Python基础之文件目录操作(示例代码)</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747925.html" target="_blank">tp5 如何做数据采集</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747924.html" target="_blank">任务2-7(服务器字体+阿里巴巴矢量库)</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747923.html" target="_blank">html标签(1):h1~h6,p,br,pre,hr</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747922.html" target="_blank">TI 电量计介绍与芯片选型指南</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747921.html" target="_blank">几款TI电源芯片简介</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747920.html" target="_blank">TI DSP芯片C2000系列读取FLASH数据</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747919.html" target="_blank">德州仪器(Ti)平台嵌入式开发基础</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747918.html" target="_blank">TI三相电机智能栅极驱动芯片特点分类</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747917.html" target="_blank">省选模拟(12.08) T3 圈圈圈圈圈圈圈圈</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747916.html" target="_blank">Hadoop生态圈技术栈(上)</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747915.html" target="_blank">大数据开发基础入门与项目实战(三)Hadoop核心及生态圈技术栈之6.Impala交互式查询</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747914.html" target="_blank">小猿圈之Linux下Mysql 操作命令</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747913.html" target="_blank">大数据Hadoop生态圈常用面试题</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747912.html" target="_blank">大数据开发基础入门与项目实战(三)Hadoop核心及生态圈技术栈之4.Hive DDL、DQL和数据操作</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747911.html" target="_blank">备战Noip2018模拟赛11(B组)T3 Monogatari 物语</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747910.html" target="_blank">【智能优化算法-圆圈搜索算法】基于圆圈搜索算法Circle Search Algorithm求解单目标优化问题附matlab代码</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747909.html" target="_blank">NYOJ 78 圈水池</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747908.html" target="_blank">递归问题 跑道 汽车 绕圈问题 Python实现</a></p> </div> <div class="col-xs-12"> <p style="margin-top: 17px;margin-bottom: 8.5px;"><a href="/dev/747907.html" target="_blank">Hadoop生态圈(三):MapReduce</a></p> </div> <!-- E 相关文章 --> </div> </div> <div class="clearfix"></div> </div> </div> </main> <aside class="col-xs-12 col-md-4"> <!--@formatter:off--> <!--@formatter:on--> <!-- S 内容推荐 --> <div class="panel panel-default hot-article"> <div class="panel-heading"> <h3 class="panel-title">内容推荐</h3> </div> <div class="panel-body"> <div class="media media-number"> <div class="media-left"> <span class="num tag">1</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/753475.html" title="大厂出品!保姆级教程帮你掌握「用户体验要素」" target="_blank">大厂出品!保姆级教程帮你掌握「用户体验要素」</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">2</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/753348.html" title="大厂实战案例!设计师如何助力京东快递业务增长?" target="_blank">大厂实战案例!设计师如何助力京东快递业务增长?</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">3</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/753116.html" title="总监干货!5个常见的UI设计规范创建误区" target="_blank">总监干货!5个常见的UI设计规范创建误区</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">4</span> </div> <div class="media-body"> <a class="link-dark" href="/kaifagongju/752540.html" title="数据库管理利器——Navicat Premium v17.0.4学习版(Windows+MacOS+Linux)" target="_blank">数据库管理利器——Navicat Premium v17.0.4学习版(Windows+MacOS+Linux)</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">5</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/750353.html" title="进阶必学!快速掌握10种国际主流设计模型" target="_blank">进阶必学!快速掌握10种国际主流设计模型</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">6</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/750352.html" title="春节期间,10个大厂的产品细节走心设计" target="_blank">春节期间,10个大厂的产品细节走心设计</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">7</span> </div> <div class="media-body"> <a class="link-dark" href="/jiaohutiyan/747940.html" title="如何帮助用户度过新人期?来看雪球APP的实战总结!" target="_blank">如何帮助用户度过新人期?来看雪球APP的实战总结!</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">8</span> </div> <div class="media-body"> <a class="link-dark" href="/ruanjianzixun/42357.html" title="Sketch 95.3最新版下载 (Sketch矢量绘图应用软件)" target="_blank">Sketch 95.3最新版下载 (Sketch矢量绘图应用软件)</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">9</span> </div> <div class="media-body"> <a class="link-dark" href="/ruanjianzixun/42356.html" title="Axure RP 9 最新正式版安装软件与汉化语言包下载(2023年3月30日更新)" target="_blank">Axure RP 9 最新正式版安装软件与汉化语言包下载(2023年3月30日更新)</a> </div> </div> <div class="media media-number"> <div class="media-left"> <span class="num tag">10</span> </div> <div class="media-body"> <a class="link-dark" href="/chanpinsheji/42343.html" title="嘘!SaaS产品的差异化设计细节,一般人我不告诉他" target="_blank">嘘!SaaS产品的差异化设计细节,一般人我不告诉他</a> </div> </div> </div> </div> <!-- E 内容推荐 --> <div class="panel panel-blockimg"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6421005227861480" crossorigin="anonymous"></script> <!-- 右侧正方形 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6421005227861480" data-ad-slot="1989994359" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="panel panel-default lasest-update"> <!-- S 最近更新 --> <div class="panel-heading"> <h3 class="panel-title">最新更新</h3> </div> <div class="panel-body"> <ul class="list-unstyled"> <li> <span><a href="/chanpinjingli.html" target="_blank">[产品经理]</a></span> <a class="link-dark" href="/chanpinjingli/758173.html" title="3分钟绘制流程图!这个AI+绘图工具的神仙组合,学完老板直呼内行" target="_blank">3分钟绘制流程图!这个AI+绘图工具的神仙组合,学完老板直呼内行</a> </li> <li> <span><a href="/chanpinjingli.html" target="_blank">[产品经理]</a></span> <a class="link-dark" href="/chanpinjingli/758172.html" title="商业潜规则:打败你的不是AI,而是人性" target="_blank">商业潜规则:打败你的不是AI,而是人性</a> </li> <li> <span><a href="/chanpinsheji.html" target="_blank">[产品设计]</a></span> <a class="link-dark" href="/chanpinsheji/758171.html" title="DeepSeek+智能派单系统的实践分享" target="_blank">DeepSeek+智能派单系统的实践分享</a> </li> <li> <span><a href="/chanpinjingli.html" target="_blank">[产品经理]</a></span> <a class="link-dark" href="/chanpinjingli/758170.html" title="一文读懂本年实际损益借(贷)方发生额" target="_blank">一文读懂本年实际损益借(贷)方发生额</a> </li> <li> <span><a href="/chuangyexueyuan.html" target="_blank">[创业学院]</a></span> <a class="link-dark" href="/chuangyexueyuan/758169.html" title="大客户 vs 中小企业:需求竟天差地别?以企业培训数字化为例" target="_blank">大客户 vs 中小企业:需求竟天差地别?以企业培训数字化为例</a> </li> <li> <span><a href="/chanpinjingli.html" target="_blank">[产品经理]</a></span> <a class="link-dark" href="/chanpinjingli/758168.html" title="不要将员工的“猴子”背到自己身上:职场管理中的权责划分" target="_blank">不要将员工的“猴子”背到自己身上:职场管理中的权责划分</a> </li> <li> <span><a href="/chanpinjingli.html" target="_blank">[产品经理]</a></span> <a class="link-dark" href="/chanpinjingli/758167.html" title="人工智能的三层架构:从应用层到基础服务层,解密智能革命" target="_blank">人工智能的三层架构:从应用层到基础服务层,解密智能革命</a> </li> <li> <span><a href="/chanpinsheji.html" target="_blank">[产品设计]</a></span> <a class="link-dark" href="/chanpinsheji/758166.html" title="一文讲清楚iOS的SKAN4.0" target="_blank">一文讲清楚iOS的SKAN4.0</a> </li> </ul> </div> <!-- E 最近更新 --> </div> <!-- S 热门标签 --> <div class="panel panel-default hot-tags"> <div class="panel-heading"> <h3 class="panel-title">热门标签</h3> </div> <div class="panel-body"> <div class="tags"> <a href="/channel/数量.html" class="tag" target="_blank"> <span>数量</span></a> <a href="/channel/AI技术趋势.html" class="tag" target="_blank"> <span>AI技术趋势</span></a> <a href="/channel/用户角色.html" class="tag" target="_blank"> <span>用户角色</span></a> <a href="/channel/心智游移.html" class="tag" target="_blank"> <span>心智游移</span></a> <a href="/channel/自然生态系统.html" class="tag" target="_blank"> <span>自然生态系统</span></a> <a href="/channel/会员权益.html" class="tag" target="_blank"> <span>会员权益</span></a> <a href="/channel/AirDrop.html" class="tag" target="_blank"> <span>AirDrop</span></a> <a href="/channel/hashmap.html" class="tag" target="_blank"> <span>hashmap</span></a> <a href="/channel/小龙虾.html" class="tag" target="_blank"> <span>小龙虾</span></a> <a href="/channel/焦虑.html" class="tag" target="_blank"> <span>焦虑</span></a> <a href="/channel/危机处理.html" class="tag" target="_blank"> <span>危机处理</span></a> <a href="/channel/发展.html" class="tag" target="_blank"> <span>发展</span></a> <a href="/channel/微信群折叠.html" class="tag" target="_blank"> <span>微信群折叠</span></a> <a href="/channel/toast.html" class="tag" target="_blank"> <span>toast</span></a> <a href="/channel/测评新算法.html" class="tag" target="_blank"> <span>测评新算法</span></a> <a href="/channel/改版.html" class="tag" target="_blank"> <span>改版</span></a> <a href="/channel/wireshark.html" class="tag" target="_blank"> <span>wireshark</span></a> <a href="/channel/投放方式.html" class="tag" target="_blank"> <span>投放方式</span></a> <a href="/channel/音频播放动效.html" class="tag" target="_blank"> <span>音频播放动效</span></a> <a href="/channel/timer.html" class="tag" target="_blank"> <span>timer</span></a> <a href="/channel/女性商业.html" class="tag" target="_blank"> <span>女性商业</span></a> <a href="/channel/古典自媒体.html" class="tag" target="_blank"> <span>古典自媒体</span></a> <a href="/channel/海外博主.html" class="tag" target="_blank"> <span>海外博主</span></a> <a href="/channel/repeater.html" class="tag" target="_blank"> <span>repeater</span></a> <a href="/channel/转账.html" class="tag" target="_blank"> <span>转账</span></a> <a href="/channel/万能钥匙.html" class="tag" target="_blank"> <span>万能钥匙</span></a> <a href="/channel/秋招.html" class="tag" target="_blank"> <span>秋招</span></a> <a href="/channel/快服务.html" class="tag" target="_blank"> <span>快服务</span></a> <a href="/channel/个人演讲.html" class="tag" target="_blank"> <span>个人演讲</span></a> <a href="/channel/客户共识.html" class="tag" target="_blank"> <span>客户共识</span></a> </div> </div> </div> <!-- E 热门标签 --> </aside> </div> </div> </main> <footer> <div id="footer"> <div class="container"> <div class="row footer-inner"> <div class="col-xs-12"> <div class="footer-logo pull-left mr-4"> <a href="/"><i class="fa fa-bookmark"></i></a> </div> <div class="pull-left"> Copyright © 2025 All rights reserved. 超级产品经理 <a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">浙ICP备14026978号-4</a> <ul class="list-unstyled list-inline mt-2"> <li><a href="/p/aboutus.html" target="_blank">关于网站</a></li> <li><a href="/contactus.html" rel="nofollow" target="_blank">联系我们</a></li> </ul> </div> </div> </div> </div> </div> </footer> <div id="floatbtn"> <!-- S 浮动按钮 --> <a class="hover" href="/index/cms.archives/post.html" target="_blank"> <i class="iconfont icon-pencil"></i> <em>立即<br>投稿</em> </a> <div class="floatbtn-item floatbtn-share"> <i class="iconfont icon-share"></i> <div class="floatbtn-wrapper" style="height:50px;top:0"> <div class="social-share" data-initialized="true" data-mode="prepend"> <a href="#" class="social-share-icon icon-weibo" target="_blank"></a> <a href="#" class="social-share-icon icon-qq" target="_blank"></a> <a href="#" class="social-share-icon icon-qzone" target="_blank"></a> <a href="#" class="social-share-icon icon-wechat"></a> </div> </div> </div> <a href="javascript:;"> <i class="iconfont icon-qrcode"></i> <div class="floatbtn-wrapper"> <div class="qrcode"><img src="https://www.imspm.com/assets/img/gongzhonghao.jpg"></div> <p>微信公众账号</p> <p>微信扫一扫加关注</p> </div> </a> <a id="back-to-top" class="hover" href="javascript:;"> <i class="iconfont icon-backtotop"></i> <em>返回<br>顶部</em> </a> <!-- E 浮动按钮 --> </div> <script type="text/javascript" src="/assets/libs/jquery/dist/jquery.min.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/libs/bootstrap/dist/js/bootstrap.min.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/libs/fastadmin-layer/dist/layer.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/libs/art-template/dist/template-native.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/addons/cms/js/jquery.autocomplete.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/addons/cms/js/swiper.min.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/addons/cms/js/share.min.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/addons/cms/js/cms.js?v=1.0.10"></script> <script type="text/javascript" src="/assets/addons/cms/js/common.js?v=1.0.10"></script> </body> </html>