JavaScript学习-入门篇


JavaScript的运行环境
开发环境就是开发JavaScript代码所需的环境,一般建议新手刚刚开始使用一些记事本工具(如sublime、editPlus、VScode),锻炼代码的手感。等学习到一定阶段,就可以使用集成开发工具IDE(如:Hbuilder、webstrom)。

js和HTML、css都是web前端的三大基本组件(也就是web前端三剑客),都是运行在浏览器上,所以只需要存在浏览器即可,同样的建议:使用Chrome浏览器。

基本语法
2.1 JavaScript的语法结构

if (condition) {// 代码块console.log("Condition is true");
} else {// 另一个代码块console.log("Condition is false");
}
var a = 10, b = 20; // 使用逗号分隔变量声明
console.log(a, b);  // 使用逗号分隔参数

2.2 注释的使用
单行注释,使用双斜杠 // 开始单行注释。注释从双斜杠开始到该行结束。
多行,使用 /* 开始多行注释,使用 / 结束多行注释。
文档注释(通常以 /
* 开始)用于生成文档或帮助工具可以理解的注释。这些注释通常包含函数、类或模块的描述。

2.3 变量和数据类型
变量用于存储数据值,可以在程序的执行过程中被读取和修改。
定义变量

使用 var、let 或 const 关键字来定义变量。var 是传统的变量声明方式,而 let 和 const 提供了更严格的变量作用域和不可变性。

var x = 10; // 使用 var 声明变量
let y = 20; // 使用 let 声明变量
const z = 30; // 使用 const 声明常量

声明变量时的注意事项

使用 var 声明的变量具有函数作用域或全局作用域。
使用 let 和 const 声明的变量具有块作用域。
const 声明的变量是不可变的,一旦赋值就不能再被改变。

2.4 基本数据类型与引用数据类型
基本数据类型

基本数据类型包括数值(Number)、字符串(String)、布尔值(Boolean)、null、undefined 和 NaN。

数值:表示数字,可以是整数或浮点数。
字符串:由字符组成的文本,用单引号、双引号或反引号(`)包围。
布尔值:只有两个值,true 和 false。
null:表示“无”,通常用于表示变量被初始化但尚未赋值。
undefined:表示变量未定义或未赋值。
NaN:表示“非数字”,通常在执行无效的数学运算时返回。
var num = 10; // 数值
var str = "Hello"; // 字符串
var bool = true; // 布尔值
var n = null; // null
var u; // undefined
var nan = NaN; // NaN

引用数据类型

引用数据类型包括数组(Array)和对象(Object)。

数组:用于存储多个值的有序集合。
对象:用于存储键值对集合。
var arr = [1, 2, 3]; // 数组
var obj = { name: "John", age: 30 }; // 对象

数据类型转换

JavaScript是弱类型语言,可以自动或手动转换数据类型。

自动类型转换:在某些操作中,JavaScript会自动将数据类型转换为另一种类型。
强制类型转换:使用 parseInt、parseFloat 等函数可以将字符串转换为数值类型。
    var a = "10"; // 字符串
var b = parseInt(a); // 强制转换为数值
console.log(b); // 输出 10

运算符和表达式
3.1 算术运算符

算术运算符用于对数值进行数学运算。
基本算术运算符

加法(+):用于数值相加或连接字符串。
减法(-):用于数值相减。
乘法(*):用于数值相乘。
除法(/):用于数值相除,结果为浮点数。
取模(%):返回除法的余数。
var a = 10;
var b = 3;
console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.3333333333333335
console.log(a % b); // 1

指数运算符(**)

ES2016引入了指数运算符,用于计算幂。

console.log(2 ** 3); // 8

3.2 关系运算符

关系运算符用于比较两个值。

等于(==):比较值是否相等,不考虑类型。
严格等于(===):比较值和类型是否都相等。
不等于(!=):比较值是否不相等,不考虑类型。
严格不等于(!==):比较值和类型是否都不相等。
大于(>):比较左侧值是否大于右侧值。
小于(<):比较左侧值是否小于右侧值。
大于等于(>=):比较左侧值是否大于或等于右侧值。
小于等于(<=):比较左侧值是否小于或等于右侧值。
console.log(10 == '10'); // true
console.log(10 === '10'); // false
console.log(10 != '10'); // false
console.log(10 !== '10'); // true
console.log(10 > 5); // true
console.log(10 < 5); // false
console.log(10 >= 10); // true
console.log(10 <= 5); // false

3.3 逻辑运算符

逻辑运算符用于组合多个条件。

逻辑与(&&):如果所有条件都为真,则结果为真。
逻辑或(||):如果至少一个条件为真,则结果为真。
逻辑非(!):反转条件的真假值。
var a = 10;
var b = 20;
console.log(a > 5 && b < 30); // false
console.log(a > 5 || b < 30); // true
console.log(!(a > 5)); // false

3.4 赋值运算符

赋值运算符用于将值赋给变量。

简单赋值(=):将右侧的值赋给左侧的变量。
加法赋值(+=):将右侧的值加到左侧变量的值上,然后赋值给左侧变量。
减法赋值(-=):将右侧的值从左侧变量的值中减去,然后赋值给左侧变量。
乘法赋值(*=):将右侧的值乘以左侧变量的值,然后赋值给左侧变量。
除法赋值(/=):将左侧变量的值除以右侧的值,然后赋值给左侧变量。
取模赋值(%=):将左侧变量的值除以右侧的值,然后取余数赋值给左侧变量。
指数赋值(**=):将左侧变量的值提升到右侧的幂,然后赋值给左侧变量。
var a = 10;
a += 5; // a = a + 5
console.log(a); // 15
a -= 3; // a = a - 3
console.log(a); // 12
a *= 2; // a = a * 2
console.log(a); // 24
a /= 4; // a = a / 4
console.log(a); // 6
a %= 3; // a = a % 3
console.log(a); // 0
a **= 2; // a = a ** 2
console.log(a); // 0

3.5 自增自减运算符

自增自减运算符用于增加或减少变量的值。

自增(++):将变量的值增加1。
自减(--):将变量的值减少1。

自增和自减运算符有前缀和后缀两种形式。

前缀(++i 或 --i):先增加或减少变量的值,然后返回变量的值。
后缀(i++ 或 i--):先返回变量的值,然后增加或减少变量的值。
var a = 10;
console.log(++a); // 11
console.log(a); // 11
console.log(a++); // 11
console.log(a); // 12

流程控制语句
4.1 条件语句(if…else)

条件语句用于基于特定条件执行不同的代码块。
if 语句

if 语句在条件为真时执行代码块。

var age = 18;
if (age >= 18) {console.log("成年人");
}

if…else 语句

if…else 语句在条件为真时执行一个代码块,在条件为假时执行另一个代码块。

if…else if…else 语句

if…else if…else 语句可以检查多个条件。

var score = 85;
if (score >= 90) {console.log("优秀");
} else if (score >= 75) {console.log("良好");
} else if (score >= 60) {console.log("及格");
} else {console.log("不及格");
}

switch 语句

switch 语句用于基于变量的值执行不同的代码块。

var day = "Monday";
switch (day) {case "Monday":console.log("开始新的一周");break;case "Friday":console.log("快到周末了");break;case "Sunday":console.log("休息日");break;default:console.log("普通的一天");
}

4.2 循环语句(for、while、do…while)

循环语句用于多次执行代码块,直到满足特定条件。
for 循环

for 循环在开始之前初始化变量,然后检查条件,如果条件为真,则执行代码块,并在每次循环结束时更新变量。

for (var i = 0; i < 5; i++) {console.log(i);
}

while 循环

while 循环在每次循环开始时检查条件,如果条件为真,则执行代码块。

var i = 0;
while (i < 5) {console.log(i);i++;
}

do…while 循环

do…while 循环至少执行一次代码块,然后检查条件,如果条件为真,则继续执行循环。

var i = 0;
do {console.log(i);i++;
} while (i < 5);

4.3 跳转语句(break、continue)

跳转语句用于控制循环的执行流程。
break 语句

break 语句用于立即退出循环。

for (var i = 0; i < 10; i++) {if (i === 5) {break;}console.log(i);
}

continue 语句

continue 语句用于跳过当前循环的剩余代码,并开始下一次循环。

for (var i = 0; i < 10; i++) {if (i % 2 === 0) {continue;}console.log(i);
}

JavaScript进阶
函数
5.1 函数的定义和调用

函数是JavaScript中封装代码的块,用于执行特定的任务。
定义函数

函数使用 function 关键字定义,后跟函数名、参数列表和函数体。

function greet(name) {console.log("Hello, " + name + "!");
}

调用函数

函数通过函数名和括号调用,括号中可以传递参数。

greet("World"); // 输出 "Hello, World!"

5.2 函数参数和返回值

函数可以接受参数,并且可以返回值。
参数

参数是函数调用时传递给函数的值。

function add(a, b) {return a + b;
}

返回值

return 语句用于从函数返回值。

var sum = add(3, 4); // sum 等于 7

5.3 匿名函数和箭头函数
匿名函数

匿名函数是没有名称的函数,通常用作回调函数。

var greet = function(name) {console.log("Hello, " + name + "!");
};

箭头函数

箭头函数是ES6引入的一种更简洁的函数语法。

var greet = (name) => {console.log("Hello, " + name + "!");
};

箭头函数可以省略参数括号(如果只有一个参数)和大括号(如果函数体只有一行代码)。

var add = (a, b) => a + b;

5.4 递归函数

递归函数是调用自身的函数。
递归示例

计算阶乘的递归函数。

function factorial(n) {if (n === 0) {return 1;} else {return n * factorial(n - 1);}
}

递归函数需要一个退出条件,以避免无限递归。

数组和对象
6.1 数组的基本操作

数组是一种特殊的数据结构,用于存储多个值。
创建数组

可以使用数组字面量或 Array 构造函数创建数组。

var fruits = ["Apple", "Banana", "Cherry"];
var numbers = new Array(1, 2, 3, 4, 5);

访问数组元素

使用索引访问数组元素,索引从0开始。

console.log(fruits[0]); // 输出 "Apple"

数组长度

使用 length 属性获取数组的长度。

console.log(fruits.length); // 输出 3

数组方法

JavaScript提供了许多数组方法,如 push、pop、shift、unshift、slice、splice 等。

fruits.push(“Date”); // 添加元素到数组末尾 fruits.pop(); // 移除数组末尾的元素
fruits.shift(); // 移除数组开头的元素 fruits.unshift(“Elderberry”); //
添加元素到数组开头 var partOfFruits = fruits.slice(1, 3); // 返回数组的一个片段
fruits.splice(1, 1); // 移除数组中的一个元素

6.2 对象的创建和属性访问

对象是一种存储键值对的数据结构。
创建对象

可以使用对象字面量或 new Object 创建对象。

var person = {name: "John",age: 30,greet: function() {console.log("Hello, my name is " + this.name);}
};
var person = new Object();
person.name = "John";
person.age = 30;
person.greet = function() {console.log("Hello, my name is " + this.name);
};

访问对象属性

使用点符号或方括号访问对象属性。

console.log(person.name); // 输出 "John"
console.log(person["age"]); // 输出 30

访问对象方法

访问对象方法与访问属性类似。

person.greet(); // 输出 "Hello, my name is John"

6.3 构造函数和原型链
构造函数

构造函数是一种特殊的方法,用于创建和初始化对象。

function Person(name, age) {this.name = name;this.age = age;this.greet = function() {console.log("Hello, my name is " + this.name);};
}
var person = new Person("John", 30);

原型链

每个对象都有一个内部链接到另一个对象的指针,称为原型。原型本身也是一个对象,并且有自己的原型。这个原型链一直延续到 null,null 的原型是 null。

console.log(person.__proto__ === Person.prototype); // 输出 true
console.log(Person.prototype.__proto__ === Object.prototype); // 输出 true
console.log(Object.prototype.__proto__ === null); // 输出 true

原型方法

所有对象都继承自 Object.prototype,因此它们都有 toString、valueOf 等方法。

console.log(person.toString()); // 输出 "[object Object]"

原型链的用途

原型链用于实现继承,一个对象可以继承另一个对象的属性和方法。

Person.prototype.sayHello = function() {console.log("Hello from " + this.name);
};
person.sayHello(); // 输出 "Hello from John"

DOM操作
7.1 DOM简介

DOM(Document Object Model,文档对象模型)是Web开发中一个非常重要的概念。它提供了一种方式,允许我们通过编程来访问和操作HTML文档中的元素。简单来说,DOM将HTML文档表示为一个节点树,每个HTML元素都是这棵树的一个节点。通过DOM,我们可以轻松地添加、删除或修改页面上的元素,实现动态的网页交互。

7.2 获取DOM元素

在JavaScript中,有多种方法可以获取DOM元素。以下是一些常用的方法:
通过id获取元素

每个HTML元素都可以有一个唯一的id属性。我们可以使用document.getElementById()方法通过id来获取元素。例如:

<div id="myDiv">这是一个div元素</div>
<script>var myDiv = document.getElementById('myDiv');console.log(myDiv); // 输出获取到的div元素
</script>

通过类名获取元素

如果要获取具有相同类名的所有元素,可以使用document.getElementsByClassName()方法。这个方法返回一个HTMLCollection对象,包含了所有具有指定类名的元素。例如:

<div class="myClass">元素1</div>
<div class="myClass">元素2</div>
<script>var myElements = document.getElementsByClassName('myClass');for (var i = 0; i < myElements.length; i++) {console.log(myElements[i]); // 输出所有具有类名'myClass'的元素}
</script>

通过标签名获取元素

使用document.getElementsByTagName()方法可以根据标签名获取元素。这个方法同样返回一个HTMLCollection对象,包含了页面上所有指定标签名的元素。例如:

<p>段落1</p>
<p>段落2</p>
<script>var paragraphs = document.getElementsByTagName('p');for (var i = 0; i < paragraphs.length; i++) {console.log(paragraphs[i]); // 输出所有<p>标签的元素}
</script>

通过querySelector和querySelectorAll获取元素

document.querySelector()方法可以使用CSS选择器来获取第一个匹配的元素,而document.querySelectorAll()方法则返回所有匹配的元素的NodeList对象。这两个方法都非常强大,因为它们允许我们使用复杂的CSS选择器来选择元素。例如:

<div id="myDiv">这是一个div元素</div>
<p class="myClass">这是一个段落</p>
<script>var myDiv = document.querySelector('#myDiv');console.log(myDiv); // 输出id为'myDiv'的div元素var myElements = document.querySelectorAll('.myClass');for (var i = 0; i < myElements.length; i++) {console.log(myElements[i]); // 输出所有具有类名'myClass'的元素}
</script>

7.3 修改DOM元素的属性和内容

一旦我们获取了DOM元素,就可以修改它们的属性和内容。以下是一些常用的方法:
修改元素的属性

可以使用element.setAttribute()方法来设置元素的属性,使用element.getAttribute()方法来获取元素的属性。例如:

<div id="myDiv" class="myClass">这是一个div元素</div>
<script>var myDiv = document.getElementById('myDiv');myDiv.setAttribute('title', '这是一个标题'); // 设置title属性console.log(myDiv.getAttribute('title')); // 输出title属性的值
</script>

修改元素的内容

可以使用element.innerHTML属性来设置或获取元素的HTML内容。例如:

<div id="myDiv">原始内容</div>
<script>var myDiv = document.getElementById('myDiv');myDiv.innerHTML = '新内容'; // 设置div的内容console.log(myDiv.innerHTML); // 输出div的内容
</script>

还可以使用element.textContent属性来设置或获取元素的纯文本内容。这个属性不会解析HTML标签,只会获取元素内部的纯文本。例如:

<div id="myDiv">原始内容</div>
<script>var myDiv = document.getElementById('myDiv');myDiv.textContent = '新内容'; // 设置div的纯文本内容console.log(myDiv.textContent); // 输出div的纯文本内容
</script>

7.4 事件处理

事件处理是DOM编程中的另一个重要方面。它允许我们响应用户的行为,如点击、鼠标移动、按键等。以下是一些常用的事件处理方法:
添加事件监听器

可以使用element.addEventListener()方法为元素添加事件监听器。这个方法接受两个参数:事件类型和事件处理函数。例如:

<button id="myButton">点击我</button>
<script>var myButton = document.getElementById('myButton');myButton.addEventListener('click', function() {alert('按钮被点击了!');});
</script>

移除事件监听器

如果需要移除之前添加的事件监听器,可以使用element.removeEventListener()方法。这个方法同样接受事件类型和事件处理函数作为参数。例如:

<button id="myButton">点击我</button>
<script>var myButton = document.getElementById('myButton');var clickHandler = function() {alert('按钮被点击了!');};myButton.addEventListener('click', clickHandler);// 在需要的时候移除事件监听器myButton.removeEventListener('click', clickHandler);
</script>

事件对象

当事件发生时,会创建一个事件对象(event object),它包含了关于事件的详细信息,如事件类型、目标元素、鼠标位置等。在事件处理函数中,可以通过event参数来访问这个对象。例如:

<div id="myDiv" style="width: 200px; height: 200px; background-color: lightblue;">鼠标移动到我这里
</div>
<script>var myDiv = document.getElementById('myDiv');myDiv.addEventListener('mousemove', function(event) {console.log('鼠标位置:', event.clientX, event.clientY);});
</script>

JavaScript 事件处理与 AJAX 数据交互
8.1 事件的基本概念

在Web开发中,事件是用户与网页交互的桥梁。例如,当用户点击按钮、提交表单、滚动页面或按下键盘时,都会触发不同的事件。JavaScript通过事件处理机制,允许我们对这些事件做出响应。
事件类型

JavaScript支持多种事件类型,包括但不限于:

鼠标事件:如click(点击)、mouseover(鼠标悬停)、mouseout(鼠标移出)、mousemove(鼠标移动)等。
键盘事件:如keydown(按键按下)、keyup(按键释放)、keypress(按键按下并释放)等。
表单事件:如submit(表单提交)、change(值改变)、focus(获得焦点)、blur(失去焦点)等。
窗口事件:如resize(窗口调整大小)、scroll(滚动)、load(页面加载完成)等。

事件处理程序

事件处理程序是响应事件的函数。当指定的事件发生时,就会调用这个函数。事件处理程序可以是匿名函数或已定义的函数。
8.2 事件冒泡和事件捕获
事件冒泡

事件冒泡是一种事件传播机制。当事件在一个元素上发生时,它会从该元素开始,逐级向上传播到文档的根节点。例如,如果你点击一个

元素内的元素,事件会首先在上触发,然后在
上触发,最后在和元素上触发。
事件捕获

与事件冒泡相反,事件捕获是从文档的根节点开始,逐级向下传播到事件源元素。事件捕获可以用来在事件到达目标元素之前进行一些处理。
事件传播阶段

在DOM2事件模型中,事件传播分为三个阶段:

捕获阶段:从根节点开始向下传播,直到目标节点。
目标阶段:在目标节点上触发事件。
冒泡阶段:从目标节点开始向上冒泡,直到根节点。

阻止事件冒泡和捕获

可以使用event.stopPropagation()方法阻止事件继续冒泡,使用event.stopImmediatePropagation()方法阻止事件继续冒泡并停止其他事件处理程序的执行。
8.3 事件监听器的使用
添加事件监听器

使用addEventListener()方法可以为元素添加事件监听器。这个方法接受三个参数:事件类型、事件处理函数和一个布尔值,表示是否在捕获阶段触发事件(默认为false,即冒泡阶段触发)。

element.addEventListener('click', function(event) {console.log('按钮被点击了');
}, false);

移除事件监听器

使用removeEventListener()方法可以移除之前添加的事件监听器。这个方法的参数与addEventListener()相同。

var clickHandler = function(event) {console.log('按钮被点击了');
};
element.addEventListener('click', clickHandler, false);
// 在需要的时候移除事件监听器
element.removeEventListener('click', clickHandler, false);

事件对象

事件对象event包含了关于事件的详细信息,如事件类型、目标元素、鼠标位置等。在事件处理函数中,可以通过event参数来访问这个对象。

element.addEventListener('click', function(event) {console.log(event.type); // 输出事件类型console.log(event.target); // 输出事件目标元素
}, false);

AJAX与数据交互

AJAX(Asynchronous JavaScript and XML)是一种在前端开发中用于异步数据交互的技术。它允许网页在不重新加载页面的情况下,与服务器进行数据交换和更新网页的局部内容。
AJAX的基本概念

AJAX通过XMLHttpRequest对象实现异步请求。这个对象允许网页与服务器进行异步通信,获取数据并更新网页内容,而不需要重新加载整个页面。
创建XMLHttpRequest对象

var xhr = new XMLHttpRequest();

打开请求

使用open()方法来初始化一个新的请求。这个方法接受四个参数:请求类型(如GET或POST)、请求URL、是否异步(布尔值)和用户名和密码(可选)。

xhr.open('GET', 'data.txt', true);

设置请求头(可选)

使用setRequestHeader()方法可以设置请求头。例如,设置Content-Type头来指定发送到服务器的数据类型。

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

发送请求

使用send()方法发送请求。如果请求类型是GET,则不需要发送数据;如果是POST,则需要发送数据。

xhr.send('key1=value1&key2=value2');

处理响应

使用onreadystatechange事件处理程序来处理服务器的响应。当请求的状态发生变化时,这个处理程序会被调用。当请求完成且响应就绪时(xhr.readyState为4),可以检查HTTP状态码(xhr.status)来确定请求是否成功。

xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {console.log(xhr.responseText); // 输出服务器响应的文本}
};

示例:使用AJAX获取数据

<button id="loadData">加载数据</button>
<div id="dataContainer"></div>
<script>var loadDataButton = document.getElementById('loadData');loadDataButton.addEventListener('click', function() {var xhr = new XMLHttpRequest();xhr.open('GET', 'data.txt', true);xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {document.getElementById('dataContainer').innerHTML = xhr.responseText;}};xhr.send();});
</script>

使用 jQuery 进行 AJAX 操作

jQuery 提供了一个简洁的 AJAX 方法,使得 AJAX 操作更加简单和易于管理。jQuery 的 $.ajax 方法是一个功能强大的工具,它封装了 XMLHttpRequest 对象的复杂性。
基本的 $.ajax 方法

$.ajax 方法接受一个配置对象,其中包含请求的详细信息,如类型、URL、数据和回调函数。

$.ajax({url: 'data.txt', // 请求的 URLtype: 'GET', // 请求类型dataType: 'text', // 服务器响应的预期类型success: function(data) {$('#dataContainer').html(data); // 请求成功时的回调函数},error: function(xhr, status, error) {console.error('Error:', error); // 请求失败时的回调函数}
});

简化的 $.get 和 $.post 方法

对于简单的 GET 和 POST 请求,jQuery 提供了 $.get 和 $.post 方法,这些方法更加简洁。
使用 $.get 方法

$.get('data.txt', function(data) {$('#dataContainer').html(data);
}).fail(function(xhr, status, error) {console.error('Error:', error);
});

使用 $.post 方法

$.post('data.txt', {key1: 'value1', key2: 'value2'}, function(data) {$('#dataContainer').html(data);
}).fail(function(xhr, status, error) {console.error('Error:', error);
});

完整示例

以下是一个使用 jQuery 进行 AJAX 操作的完整示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>AJAX with jQuery</title><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body><button id="loadData">加载数据</button><div id="dataContainer"></div><script>$('#loadData').click(function() {$.ajax({url: 'data.txt',type: 'GET',dataType: 'text',success: function(data) {$('#dataContainer').html(data);},error: function(xhr, status, error) {console.error('Error:', error);}});});</script>
</body>
</html>

在这个示例中,当用户点击“加载数据”按钮时,会发送一个 GET 请求到 data.txt,并将服务器的响应内容显示在 dataContainer 元素中

JavaScript库和框架

10.1 jQuery简介

jQuery是一个快速、小巧且功能丰富的JavaScript库。它简化了HTML文档操作、事件处理、动画和Ajax交互。jQuery的设计宗旨是“write less, do more”,即编写更少的代码,实现更多的功能。

jQuery的特点

简洁的语法:jQuery的语法非常简洁,易于学习和使用。
浏览器兼容性:自动处理浏览器之间的差异,开发者无需担心不同浏览器的兼容性问题。
丰富的插件:拥有大量的插件,可以轻松扩展功能。
强大的选择器:提供强大的选择器,可以轻松地选择和操作DOM元素。
动画和效果:内置了丰富的动画和效果,可以轻松实现复杂的动画效果。

如何引入jQuery

你可以通过CDN(内容分发网络)来引入jQuery,这样可以加快页面的加载速度。以下是一个示例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

你也可以下载jQuery的源码,并将其包含在你的项目中。

10.2 使用jQuery进行DOM操作

jQuery提供了丰富的DOM操作方法,可以轻松地选择、添加、删除和修改DOM元素。

选择元素

jQuery的选择器与CSS选择器非常相似,可以轻松地选择页面上的元素。以下是一些常用的选择器:

基本选择器$('#id') 选择具有指定id的元素,$('.class') 选择具有指定类的元素,$('tag') 选择指定的标签。
层级选择器parent > child 选择直接子元素,parent child 选择所有后代元素。
属性选择器[attribute] 选择具有指定属性的元素,[attribute=value] 选择具有指定属性值的元素。

修改元素内容

可以使用.html().text().val()方法来修改元素的内容。.html()方法用于获取或设置元素的HTML内容,.text()方法用于获取或设置元素的文本内容,.val()方法用于获取或设置表单元素的值。

$('#myElement').html('<p>新的HTML内容</p>');
$('#myElement').text('新的文本内容');
$('#myInput').val('新的输入值');

添加和删除元素

可以使用.append().prepend().after().before().remove()等方法来添加和删除元素。

$('#myElement').append('<p>新的段落</p>'); // 在元素末尾添加内容
$('#myElement').prepend('<p>新的段落</p>'); // 在元素开头添加内容
$('#myElement').after('<p>新的段落</p>'); // 在元素之后添加内容
$('#myElement').before('<p>新的段落</p>'); // 在元素之前添加内容
$('#myElement').remove(); // 删除元素

修改元素属性

可以使用.attr()方法来获取或设置元素的属性。

$('#myElement').attr('href', 'https://www.example.com'); // 设置href属性
var href = $('#myElement').attr('href'); // 获取href属性

10.3 使用jQuery进行动画和效果

jQuery提供了丰富的动画和效果方法,可以轻松地实现复杂的动画效果。

基本动画方法

jQuery的.show().hide().toggle()方法可以用于显示、隐藏和切换元素的可见性。

$('#myElement').show(); // 显示元素
$('#myElement').hide(); // 隐藏元素
$('#myElement').toggle(); // 切换元素的可见性

自定义动画

可以使用.animate()方法来创建自定义动画。这个方法接受一个包含要动画化的属性和值的对象,以及一个可选的持续时间参数。

$('#myElement').animate({width: '300px',height: '200px',opacity: 0.5
}, 1000); // 持续时间为1000毫秒

过渡效果

jQuery的.fadeIn().fadeOut().fadeToggle()方法可以用于淡入、淡出和切换元素的透明度。

$('#myElement').fadeIn(); // 淡入元素
$('#myElement').fadeOut(); // 淡出元素
$('#myElement').fadeToggle(); // 切换元素的淡入淡出状态

滑动效果

jQuery的.slideDown().slideUp().slideToggle()方法可以用于滑动显示、隐藏和切换元素的可见性。

$('#myElement').slideDown(); // 滑动显示元素
$('#myElement').slideUp(); // 滑动隐藏元素
$('#myElement').slideToggle(); // 切换元素的滑动状态

完整示例

以下是一个使用jQuery进行DOM操作和动画效果的完整示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery DOM and Animation</title><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body><button id="showButton">显示</button><button id="hideButton">隐藏</button><div id="myElement" style="width: 100px; height: 100px; background-color: red;"></div><script>$('#showButton').click(function() {$('#myElement').show('slow'); // 慢速显示元素});$('#hideButton').click(function() {$('#myElement').hide('fast'); // 快速隐藏元素});$('#myElement').hover(function() {$(this).animate({width: '200px',height: '150px',opacity: 0.5}, 1000); // 鼠标悬停时改变元素的大小和透明度}, function() {$(this).animate({width: '100px',height: '100px',opacity: 1}, 1000); // 鼠标移出时恢复元素的原始大小和透明度});</script>
</body>
</html>

在这个示例中,点击“显示”按钮会显示myElement元素,点击“隐藏”按钮会隐藏myElement元素。当鼠标悬停在myElement元素上时,元素会改变大小和透明度,鼠标移出时会恢复原始状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL把字符串按逗号分割成记录

在 SQL 中&#xff0c;可以通过以下方法将字符串按逗号分割&#xff0c;并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法&#xff1a; 1. 使用 STRING_SPLIT&#xff08;SQL Server 2016&#xff09; STRING_SPLIT 是 SQL Server 提供的内置…

大模型系列18-AI Agents

什么是AI Agents Al Agent智能体&#xff0c;是指一种能够模拟人类思考和行为来自动执行任务&#xff0c;以解决复杂问题的程序或系统 架构图 思考->行动->观测 思考依赖记忆以及规划决策&#xff0c;行动依赖工具&#xff0c;观测依赖感知 举例 长沙今天白天和晚上的…

mysql自定义安装

1、下载安装包 我是在windows上安装&#xff0c;所以选择“Mysql Installer for Windows” 2、安装mysql 双击“mysql-installer-community-8.0.40.0.msi”&#xff0c;开始启动安装 这里选择安装项&#xff0c;这里只选择了两项。workbench是图形化管理工具&#xff0c;比较吃…

22408操作系统期末速成/复习(考研0基础上手)

第一部分:计算题&#xff1a; 考察范围&#xff1a;&#xff08;标红的是重点考&#xff09; 第一章&#xff1a;CPU利用率&#xff1a; 第二章&#xff1a; 进程调度算法&#xff08;需要注意不同调度算法的优先级和题目中给出的是否可以抢占【分为可抢占和不可抢占&#xff…

数据去重与重复数据的高效处理策略

在实际业务中&#xff0c;数据去重是一个非常常见的需求&#xff0c;特别是在日志数据、用户操作记录或交易记录等领域。去重不仅仅是删除重复数据&#xff0c;更重要的是按照业务规则保留最有价值的数据记录。 本文将探讨如何在 SQL 中高效地处理重复数据&#xff0c;通过 DI…

综合能源建模:理论、方法与实践

一、引言 随着全球能源需求的持续增长以及对能源安全、环境保护和可持续性发展的日益关注&#xff0c;综合能源系统&#xff08;Integrated Energy System&#xff0c;IES&#xff09;作为一种能够整合多种能源资源、实现能源高效利用和协同优化的解决方案&#xff0c;正逐渐成…

【Leetcode 热题 100】74. 搜索二维矩阵

问题背景 给你一个满足下述两条属性的 m n m \times n mn 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 t a r g e t target target&#xff0c;如果 t a r g e t target target 在矩阵中&…

DOS攻击的原理和实现 (网络安全)hping3和Slowloris的运用

DoS攻击的原理和实现 DoS攻击&#xff08;Denial of Service Attack&#xff0c;拒绝服务攻击&#xff09;是指通过恶意手段使目标服务器、服务或网络资源无法正常提供服务&#xff0c;从而影响正常用户的访问。DoS攻击通常通过消耗目标系统的资源&#xff08;如带宽、内存、处…

Elasticsearch与数据库数据一致性:最佳实践与解决方案

在现代应用程序中&#xff0c;Elasticsearch&#xff08;ES&#xff09;作为一个高效的分布式搜索引擎&#xff0c;常常与数据库一同使用&#xff0c;以提供强大的搜索、分析和数据可视化功能。然而&#xff0c;数据库和Elasticsearch之间的同步与一致性常常成为一个挑战。如何…

jquery实现的网页版扫雷小游戏源码

源码介绍 这是一款基于jQuery实现的经典扫雷小游戏源码&#xff0c;玩家根据游戏规则进行游戏&#xff0c;末尾再在确定的地雷位置单击右键安插上小红旗即可赢得游戏&#xff01;是一款非常经典的jQuery游戏代码。本源码改进了获胜之后的读数暂停功能。 效果预览 源码下载 j…

接口隔离原则,到底什么需要隔离?

接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09;是SOLID五大设计原则之一&#xff0c;其核心思想是&#xff1a;客户端不应该被迫依赖于它不使用的方法&#xff1b;接口应当尽量小而专一&#xff0c;避免创建“胖”接口&#xff08;即一个接口中定义…

对计网大题的一些指正(中间介绍一下CDM的原理和应用)

目录 前言&#xff1a; &#xff08;1&#xff09;五层原理体系结构每层功能&#xff1a; 下面是文档的答案&#xff1a; 我在之前的博客里面有介绍过五层原理体系结构&#xff0c; 按理来说&#xff0c;第五层应该是应用层才对&#xff0c;而会话层的功能应该被放到应用层…

Arduino UNO 驱动1.8 TFT屏幕显示中文

背景 最近入手了一块1.8寸的tft屏幕&#xff0c;通过学习文档&#xff0c;已经掌握了接线&#xff0c;显示英文、数字、矩形区域、划线、画点等操作&#xff0c; 但是想显示中文的时候操作比较复杂。 问题 1、arduino uno 驱动这款屏幕目前使的是自带的<TFT.h> 库操作…

【论文阅读】Anchor-based fast spectral ensemble clustering

论文地址&#xff1a;Anchor-based fast spectral ensemble clustering - ScienceDirect 代码地址&#xff1a; 摘要 集成聚类通过融合多个基础聚类方法&#xff0c;可以获得更好且更稳健的结果&#xff0c;因此受到广泛关注。尽管近年来已经出现了许多代表性的算法&#xff…

R语言的数据结构

R语言的数据结构 R语言是专门为统计计算和数据分析而设计的一种编程语言&#xff0c;因其强大的数据处理能力而受到广泛欢迎。在R中&#xff0c;数据结构是理解和有效使用R语言的基础。本文将详细介绍R语言中的主要数据结构&#xff0c;包括向量、矩阵、数据框、列表、因子等&…

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313 Github地址&#xff1a;https://github.com/CraftJarvis/RAT 想象一下&#xff0c;一个人工智能助手可以像莎士比亚一样写作&#xff0c;像专家一样推理。这听起来很了不起&#xff0c;对吧&#xff1f;但是&#xff0…

关于数组的一些应用--------数组作函数的返回值(斐波那契数列数列的实现)

数组在作为函数的返回值&#xff0c;一个很经典的例子就是获取斐波那契数列的前N项 代码思路&#xff1a; 设计思路 输入&#xff1a; 输入一个整数 n&#xff0c;表示要生成斐波那契数列的长度。 输出&#xff1a; 输出一个长度为 n 的整数数组&#xff0c;其中每个元素为斐…

【IT人物系列】之MySQL创始人

前言 当今世界有无数的人构成&#xff0c;其中有些人做了一些改变世界的事情&#xff0c;比如&#xff1a;乔布斯缔造了Apple帝国&#xff0c;‌詹姆斯高斯林创造了Java语言等。正是这些优秀的人做的这些优秀的事情&#xff0c;让这个世界更加美好。因此他们值得铭记。 从今天…

【2025最新计算机毕业设计】基于SpringBoot+Vue智慧养老医护系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

pytorch镜像源

我以为的 pip install torch2.3.1cu118 torchvision0.18.1cu118 torchaudio2.3.1cu118 -f https://download.pytorch.org/whl/torch_stable.html实际上&#xff0c;有很多加速方案 为提高下载速度可以使用国内的镜像源来安装与 CUDA 11.8 兼容的 PyTorch。 方法 1&#xff1a…