jQuery 的字面意思其实就是 JavaScript 和查询(Query),即用于辅助开发 JavaScript 的库。jQuery 是继 Prototype 之后的又一个优质的 JavaScript 库,属于开源编程语言。

简介

jQuery 是一个 JavaScript 函数库。

jQuery 是一个轻量级的“写的少,做的多”的 JavaScript 库。

jQuery 库包含以下功能:

  • HTML 元素选取
  • HTML 元素操作
  • CSS 操作
  • HTML 事件函数
  • JavaScript 特效和动画
  • HTML DOM 遍历和修改
  • AJAX
  • Utilities

除此之外,jQuery 还提供了大量的插件。

安装

下载

jQuery 官方网站下载。

jQuery 库是一个 JavaScript 文件,可以使用 HTML 的标签引用它:

1
2
3
<head>
<script src="jquery-3.4.1.min.js"></script>
</head>

CDN

如果不希望下载并存放 jQuery,那么可以通过 CDN 引用它。

  • 谷歌 CDN

    1
    https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
  • 微软 CDN

    1
    https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js
  • CDNJS CDN

    1
    https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js
  • jsDelivr CDN

    1
    https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js
  • jQuery CDN

    1
    https://code.jquery.com/jquery-3.4.1.min.js

语法

jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作。

基础语法: $(selector).action()

  1. 符号“$”定义 jQuery;
  2. 选择符(selector)“查询”和“查找” HTML 元素;
  3. jQuery 的 action() 执行对元素的操作。

示例:

  • $(this).hide():隐藏当前元素
  • $("p").hide():隐藏所有段落
  • $("p .test").hide():隐藏所有 class="test"段落
  • $("#test").hide():隐藏所有 id="test"元素

文档就绪事件

在之后示例中的所有 jQuery 函数都位于一个 document ready 函数中:

1
2
3
$(document).ready(function(){
// 开始写 jQuery 代码……
});

这是为了防止文档在完全加载(就绪)之前运行 jQuery 代码。

如果在文档没有完全加载之前就运行函数,操作可能失败。下面是两个具体的例子:

  • 试图隐藏一个不存在的元素
  • 获得未完全加载的图像的大小

简洁写法(与以上写法效果相同):

1
2
3
$(function(){
// 开始写 jQuery 代码……
});

选择器

jQuery 选择器允许对 HTML 元素组或单个元素进行操作。

jQuery 选择器基于元素的 id、类、类型、属性、属性值等“查找”(或选择)HTML 元素。它基于已经存在的 CSS 选择器,除此之外,它还有一些自定义的选择器。

jQuery 中所有选择器都以美元符号开头:$()

元素选择器

元素选择器基于元素名选取元素。

在页面中选取所有 <p> 元素:

1
$("p")

示例

用户点击按钮后,所有 <p> 元素都隐藏:

1
2
3
4
5
$(document).ready(function () {
$("button").click(function () {
$("p").hide();
});
});

id 选择器

id 选择器通过 HTML 元素的 id 属性选取指定的元素。

页面中元素的 id 应该是唯一的,所以要在页面中选取唯一的元素需要通过 #id 选择器。

通过 id 选取元素语法如下:

1
$("#test")

示例

当用户点击按钮后,id="test" 属性的元素将被隐藏:

1
2
3
4
5
$(document).ready(function () {
$("button").click(function () {
$("#test").hide();
});
});

class 选择器

类选择器可以通过指定的 class 查找元素。

语法如下:

1
$(".test")

示例

用户点击按钮后所有带有 class="test" 属性的元素都隐藏:

1
2
3
4
5
$(document).ready(function () {
$("button").click(function () {
$(".test").hide();
});
});

CSS 选择器

CSS 选择器可用于改变 HTML 元素的 CSS 属性。

示例

下面的例子把所有 p 元素的背景颜色更改为红色:

1
$("p").css("background-color", "red");

更多示例

语法 描述
$("*") 选取所有元素
$(this) 选取当前 HTML 元素
$("p.intro") 选取 class 为 intro<p> 元素
$("p:first") 选取第一个 <p> 元素
$("ul li:first") 选取第一个 <ul> 元素的第一个 <li> 元素
$("ul li:first-child") 选取每个 <ul> 元素的第一个 <li> 元素
$("[href]") 选取带有 href 属性的元素
$("a[target='_blank']") 选取所有 target 属性值等于 "_blank"<a> 元素
$("a[target!='_blank']") 选取所有 target 属性值不等于 "_blank"<a> 元素
$(":button") 选取所有 <button> 元素和 type="button"<input> 元素
$("tr:even") 选取偶数位置的 <tr> 元素
$("tr:odd") 选取奇数位置的 <tr> 元素

独立文件中使用 jQuery 函数

独立的 jQuery 函数文件通过 src 属性来引用

1
2
3
4
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="my_jquery_functions.js"></script>
</head>

事件

jQuery 是为事件处理特别设计的。

什么是事件

页面对不同访问者的响应叫做事件。

事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。

示例:

  • 在元素上移动鼠标。
  • 选取单选按钮
  • 点击元素

在事件中经常使用术语“触发”(或“激发”)。例如:“当按下按键时,触发 keypress 事件”。

常见 DOM 事件:

鼠标事件 键盘事件 表单事件 文档 / 窗口事件
click keypress submit load
dblclick keydown change resize
mouseenter keyup focus scroll
mouseleave hover blur unload

jQuery 事件方法语法

在 jQuery 中,大多数 DOM 事件都有一个等效的 jQuery 方法。

页面中指定一个点击事件:

1
$("p").click();

下一步是定义什么时间触发事件。可以通过一个事件函数实现:

1
2
3
$("p").click(function () {
// 动作触发后执行的代码
});

常用的 jQuery 事件方法

$(document).ready()

$(document).ready() 方法允许在文档完全加载完后执行函数。该事件方法在前面已经提到过。

click()

click() 方法是当按钮点击事件被触发时会调用一个函数。

该函数在用户点击 HTML 元素时执行。

在下面的示例中,当点击事件在某个 <p> 元素上触发时,隐藏当前的 <p> 元素:

1
2
3
$("p").click(function () {
$(this).hide();
});

dblclick()

当双击元素时,会发生 dblclick 事件。

dblclick() 方法触发 dblclick 事件,或规定当发生 dblclick 事件时运行的函数:

1
2
3
$("p").dblclick(function () {
$(this).hide();
});

mouseenter()

当鼠标指针穿过元素时,会发生 mouseenter 事件。

mouseenter() 方法触发 mouseenter 事件,或规定当发生 mouseenter 事件时运行的函数:

1
2
3
$("#p1").mouseenter(function () {
alert("鼠标移到该段落上!");
});

mouseleave()

当鼠标指针离开元素时,会发生 mouseleave 事件。

mouseleave() 方法触发 mouseleave 事件,或规定当发生 mouseleave 事件时运行的函数:

1
2
3
$("#p1").mouseleave(function () {
alert("再见!鼠标离开了该段落。");
});

mousedown()

当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件。

mousedown() 方法触发 mousedown 事件,或规定当发生 mousedown 事件时运行的函数:

1
2
3
$("#p1").mousedown(function () {
alert("鼠标在该段落上按下!");
});

mouseup()

当在元素上松开鼠标按钮时,会发生 mouseup 事件。

mouseup() 方法触发 mouseup 事件,或规定当发生 mouseup 事件时运行的函数:

1
2
3
$("#p1").mouseup(function () {
alert("鼠标在段落上松开。");
});

hover()

hover() 方法用于模拟光标悬停事件。

当鼠标移动到元素上时,会触发指定的第一个函数(mouseenter);当鼠标移出这个元素时,会触发指定的第二个函数(mouseleave)。

1
2
3
4
5
6
$("#p1").hover(function () {
alert("鼠标移到该段落上!");
},
function () {
alert("再见!鼠标离开了该段落。");
});

focus()

当元素获得焦点时,发生 focus 事件。

当通过鼠标点击选中元素或通过 Tab 键定位到元素时,该元素就会获得焦点。

focus() 方法触发 focus 事件,或规定当发生 focus 事件时运行的函数:

1
2
3
$("input").focus(function () {
$(this).css("background-color", "#cccccc");
});

blur()

当元素失去焦点时,发生 blur 事件。

blur() 方法触发 blur 事件,或规定当发生 blur 事件时运行的函数:

1
2
3
$("input").blur(function () {
$(this).css("background-color", "#ffffff");
});

比较 keypress、keydown 与 keyup

  • keydown:在键盘上按下某键时发生,一直按着则会不断触发,返回键盘代码;
  • keypress:在键盘上按下一个按键,并产生一个字符时发生,返回 ASCII 码。注意:Shift、Alt、Ctrl 等键按下并不会产生字符,所以监听无效。换句话说,只有按下能在屏幕上输出字符的按键时 keypress 事件才会触发。若一直按着某按键则会不断触发。
  • keyup:用户松开某一个按键时触发,与 keydown 相对,返回键盘代码。

效果

隐藏和显示

可以使用 toggle() 方法来切换 hide()show() 方法。

显示被隐藏的元素,并隐藏已显示的元素:

1
2
3
$("button").click(function () {
$("p").toggle();
});

语法:

1
$(selector).toggle(speed, callback);

speed 参数规定隐藏/显示的速度,可以取以下值:“slow”、“fast”或毫秒。

可选的 callback 参数是 toggle() 方法完成后所执行的函数名称,其具有以下三点说明:

  • $(selector) 选中的元素的个数为 n 个,则 callback 函数会执行 n 次;
  • callback 函数名后加括号,会立刻执行函数体,而不是等到显示 / 隐藏完成后才执行;
  • callback 既可以是函数名,也可以是匿名函数。

淡入淡出

通过 jQuery,可以实现元素的淡入淡出效果。

jQuery 拥有下面四种 fade 方法:

  • fadeIn():淡入已隐藏的元素;
  • fadeOut():淡出可见元素;
  • fadeToggle():在 fadeIn()fadeOut() 方法之间进行切换;
  • fadeTo():允许渐变为给定的不透明度。

前三种 fadeIn()fadeOut()fadeToggle() 方法的语法如下:

1
$(selector).fade(speed, callback);
1
2
3
4
5
$("button").click(function () {
$("#div1").fadeIn();
$("#div2").fadeOut("slow");
$("#div3").fadeToggle(3000);
});

fadeTo() 方法的语法如下:

1
$(selector).fadeTo(speed, opacity, callback);

必需的 opacity 参数将淡入淡出效果设置为给定的不透明度(值介于 0 与 1 之间)。

1
2
3
4
5
$("button").click(function () {
$("#div1").fadeTo("slow", 0.15);
$("#div2").fadeTo("slow", 0.4);
$("#div3").fadeTo("slow", 0.7);
});

滑动

通过 jQuery,可以在元素上创建滑动效果。

jQuery 拥有以下滑动方法:

  • slideDown():向下滑动元素;
  • slideUp():向上滑动元素;
  • slideToggle():在 slideDown()slideUp() 方法之间进行切换。

语法如下:

1
$(selector).slide(speed, callback);

动画

animate() 方法用于创建自定义动画。

语法如下:

1
2
3
$(selector).animate({
params
}, speed, callback);

必需的 params 参数定义形成动画的 CSS 属性。

下面的例子演示 animate() 方法的简单应用。它把 <div> 元素往右边移动了 250 像素:

1
2
3
4
5
$("button").click(function () {
$("div").animate({
left: '250px'
});
});

默认情况下,所有 HTML 元素都有一个静态位置,且无法移动。
如需对位置进行操作,要记得先把元素的 CSS position 属性设置为 relativefixedabsolute

操作多个属性

生成动画的过程中可同时使用多个属性:

1
2
3
4
5
6
7
8
$("button").click(function () {
$("div").animate({
left: '250px',
opacity: '0.5',
height: '150px',
width: '150px'
});
});

可以用 animate() 方法来操作几乎所有 CSS 属性。不过,需要记住一件重要的事情:当使用 animate() 时,必须使用驼峰标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left,使用 marginRight 而不是 margin-right,等等。

同时,色彩动画并不包含在核心 jQuery 库中。如果需要生成颜色动画,需要下载 Color Animations 插件。

使用相对值

也可以定义相对值(该值相对于元素的当前值)。需要在值的前面加上 +=-=

1
2
3
4
5
6
7
$("button").click(function () {
$("div").animate({
left: '250px',
height: '+=150px',
width: '+=150px'
});
});

使用预定义的值

甚至可以把属性的动画值设置为 showhidetoggle

1
2
3
4
5
$("button").click(function () {
$("div").animate({
height: 'toggle'
});
});

使用队列功能

默认地,jQuery 提供针对动画的队列功能。

这意味着如果在彼此之后编写多个 animate() 调用,jQuery 会创建包含这些方法调用的“内部”队列,然后逐一运行这些 animate 调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$("button").click(function () {
var div = $("div");
div.animate({
height: '300px',
opacity: '0.4'
}, "slow");
div.animate({
width: '300px',
opacity: '0.8'
}, "slow");
div.animate({
height: '100px',
opacity: '0.4'
}, "slow");
div.animate({
width: '100px',
opacity: '0.8'
}, "slow");
});

下面的例子把 <div> 元素往右边移动了 100 像素,然后增加文本的字号:

1
2
3
4
5
6
7
8
9
$("button").click(function () {
var div = $("div");
div.animate({
left: '100px'
}, "slow");
div.animate({
fontSize: '3em'
}, "slow");
});

停止动画

stop() 方法用于停止动画或效果,在它们完成之前。

stop() 方法适用于所有 jQuery 效果函数,包括滑动、淡入淡出和自定义动画。

语法如下:

1
$(selector).stop(stopAll, goToEnd);
  • 可选的 stopAll 参数规定是否应该清除动画队列。默认是 false,即仅停止活动的动画,允许任何排入队列的动画向后执行。
  • 可选的 goToEnd 参数规定是否立即完成当前动画。默认是 false。

因此,默认地,stop() 会清除在被选元素上指定的当前动画。

下面的例子演示 stop() 方法,不带参数:

1
2
3
$("#stop").click(function () {
$("#panel").stop();
});

回调函数

Callback 函数在当前动画 100% 完成之后执行。

许多 jQuery 函数涉及动画。这些函数也许会将 speedduration 作为可选参数。由于 JavaScript 语句(指令)是逐一执行的:按照次序,动画之后的语句可能会产生错误或页面冲突,因为动画还没有完成。为了避免这个情况,可以以参数的形式添加 Callback 函数。

以下示例在隐藏效果完全实现后回调函数:

1
2
3
4
5
$("button").click(function () {
$("p").hide("slow", function () {
alert("该段落现在被隐藏了。");
});
});

以下示例没有回调函数,警告框会在隐藏效果完成前弹出:

1
2
3
4
$("button").click(function () {
$("p").hide("slow");
alert("该段落现在被隐藏了。");
});

Chaining

通过 jQuery,可以把动作/方法链接在一起。

Chaining 允许在一条语句中运行多个 jQuery 方法(在相同的元素上)。这样的话,浏览器就不必多次查找相同的元素。

如需链接一个动作,只需简单地把该动作追加到之前的动作上。

下面的例子把 css()slideUp()slideDown() 链接在一起。p1 元素首先会变为红色,然后向上滑动,最后向下滑动:

1
$("#p1").css("color", "red").slideUp(2000).slideDown(2000);

如果需要,也可以添加多个方法调用。

当进行链接时,代码行会变得很差。不过,jQuery 语法不是很严格。可以按照希望的格式来写,包含换行和缩进:

1
2
3
$("#p1").css("color", "red")
.slideUp(2000)
.slideDown(2000);

jQuery 会抛掉多余的空格,并当成一行长代码来执行上面的代码行。

jQuery 与 HTML

获取

jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易。

DOM = Document Object Model(文档对象模型)

DOM 定义访问 HTML 和 XML 文档的标准:

“W3C 文档对象模型独立于平台和语言的界面,允许程序和脚本动态访问和更新文档的内容、结构以及样式。”

获取内容

三个简单实用的用于 DOM 操作的 jQuery 方法:

  • text():设置或返回所选元素的文本内容。
  • html():设置或返回所选元素的内容(包括 HTML 标记)。
  • val():设置或返回表单字段的值。

下面的例子演示如何通过 text()html() 方法来获得内容:

1
2
3
4
5
6
$("#btn1").click(function () {
alert("Text: " + $("#test").text());
});
$("#btn2").click(function () {
alert("HTML: " + $("#test").html());
});

下面的例子演示如何通过 val() 方法获得输入字段的值:

1
2
3
$("#btn1").click(function () {
alert("Value: " + $("#test").val());
});

获取属性

attr() 方法用于获取属性值。

下面的例子演示如何获得链接中 href 属性的值:

1
2
3
$("button").click(function () {
alert($("#w3c").attr("href"));
});

设置

设置内容

使用上一节中的三个相同的方法来设置内容:

  • text():设置或返回所选元素的文本内容。
  • html():设置或返回所选元素的内容(包括 HTML 标记)。
  • val():设置或返回表单字段的值。

下面的例子演示如何通过 text()html() 以及 val() 方法来设置内容:

1
2
3
4
5
6
7
8
9
$("#btn1").click(function () {
$("#test1").text("Hello world!");
});
$("#btn2").click(function () {
$("#test2").html("<b>Hello world!</b>");
});
$("#btn3").click(function () {
$("#test3").val("Dolly Duck");
});

上面的三个 jQuery 方法同样拥有回调函数。回调函数有两个参数:被选元素列表中当前元素的下标,以及原始(旧的)值。然后以函数新值返回希望使用的字符串。

下面的例子演示带有回调函数的 text()html()

1
2
3
4
5
6
7
8
9
10
11
$("#btn1").click(function () {
$("#test1").text(function (i, origText) {
return "旧文本:" + origText + " 新文本:Hello world! (index: " + i + ")";
});
});

$("#btn2").click(function () {
$("#test2").html(function (i, origText) {
return "旧 HTML:" + origText + " 新 HTML:Hello <b>world!</b> (index: " + i + ")";
});
});

设置属性

attr() 方法也用于设置/改变属性值。

下面的例子演示如何改变(设置)链接中 href 属性的值:

1
2
3
$("button").click(function () {
$("#w3c").attr("href", "https://www.w3cschool.cn/jquery");
});

attr() 方法也允许同时设置多个属性。

下面的例子演示如何同时设置 hreftitle 属性:

1
2
3
4
5
6
$("button").click(function () {
$("#w3c").attr({
"href": "https://www.w3cschool.cn/jquery",
"title": "jQuery 教程"
});
});

attr() 也提供回调函数。回调函数由两个参数:被选元素列表中当前元素的下标,以及原始(旧的)值。然后以函数新值返回希望使用的字符串。

下面的例子演示带有回调函数的 attr() 方法:

1
2
3
4
5
$("button").click(function () {
$("#w3cschool").attr("href", function (i, origValue) {
return origValue + "/jquery";
});
});

添加元素

用于添加新内容的四个 jQuery 方法:

  • append():在被选元素内部的结尾插入指定内容。
  • prepend():在被选元素内部的开头插入指定内容。
  • after():在被选元素之后插入内容。
  • before():在被选元素之前插入内容。

append()

append() 方法在被选元素的结尾插入内容。

1
2
3
4
5
6
$("#btn1").click(function () {
$("p").append("<b>追加文本</b>。");
});
$("#btn2").click(function () {
$("ol").append("<li>追加列表项</li>");
});

prepend()

prepend() 方法在被选元素的开头插入内容。

1
2
3
4
5
6
$("#btn1").click(function () {
$("p").prepend("<b>在开头追加文本</b>。");
});
$("#btn2").click(function () {
$("ol").prepend("<li>在开头添加列表项</li>");
});

通过 append() 和 prepend() 添加若干新元素

在上面的例子中,只在被选元素的开头/结尾插入文本/HTML。

不过,append()prepend() 方法能够通过参数接收无限数量的新元素。可以通过 jQuery 来生成文本/HTML(就像上面的例子那样),或者通过 JavaScript 代码和 DOM 元素。

在下面的例子中,创建若干个新元素。这些元素可以通过文本/HTML、jQuery 或者 JavaScript/DOM 来创建。然后通过 append() 方法把这些新元素追加到文本中(对 prepend() 同样有效):

1
2
3
4
5
6
7
function appendText() {
var txt1 = "<p>文本。</p>"; // 使用 HTML 标签创建文本
var txt2 = $("<p></p>").text("文本。"); // 使用 jQuery 创建文本
var txt3 = document.createElement("p");
txt3.innerHTML = "文本。"; // 使用 DOM 创建文本
$("body").append(txt1, txt2, txt3); // 追加新元素
}

after() 和 before()

after() 方法在被选元素之后插入内容;before() 方法在被选元素之前插入内容。

1
2
3
4
5
6
$("#btn1").click(function () {
$("img").before("<b>之前</b>");
});
$("#btn2").click(function () {
$("img").after("<i>之后</i>");
});

通过 after() 和 before() 添加若干新元素

after()before() 方法能够通过参数接收无限数量的新元素。

在下面的例子中,创建若干新元素。这些元素可以通过文本/HTML、jQuery 或者 JavaScript/DOM 来创建。然后通过 after() 方法把这些新元素插到文本中(对 before() 同样有效):

1
2
3
4
5
6
7
function afterText() {
var txt1 = "<b>I </b>"; // 使用 HTML 创建元素
var txt2 = $("<i></i>").text("love "); // 使用 jQuery 创建元素
var txt3 = document.createElement("big"); // 使用 DOM 创建元素
txt3.innerHTML = "jQuery!";
$("img").after(txt1, txt2, txt3); // 在图片后添加文本
}

删除元素

删除元素/内容

如需删除元素和内容,一般可使用以下两个 jQuery 方法:

  • remove():删除被选元素(及其子元素)。
  • empty():从被选元素中删除子元素。

过滤被删除的元素

remove() 方法也可接受一个参数,允许对被删元素进行过滤。该参数可以是任何 jQuery 选择器的语法。

下面的例子删除 class="italic" 的所有 <p> 元素:

1
$("p").remove(".italic");

CSS 类

jQuery 拥有若干进行 CSS 操作的方法:

  • addClass():向被选元素添加一个或多个类。
  • removeClass():从被选元素删除一个或多个类。
  • toggleClass():对被选元素进行添加/删除类的切换操作。
  • css():设置或返回样式属性。

示例样式表

下面的样式表将用于本节的所有例子:

1
2
3
4
5
6
7
8
.important {
font-weight: bold;
font-size: xx-large;
}

.blue {
color: blue;
}

addClass()

下面的例子展示如何向不同的元素添加 class 属性。当然,在添加类时,也可以选取多个元素(以逗号分隔):

1
2
3
4
$("button").click(function () {
$("h1, h2, p").addClass("blue");
$("div").addClass("important");
});

也可以在 addClass() 方法中规定多个类(以空格分隔):

1
2
3
$("button").click(function () {
$("#div1").addClass("important blue");
});

removeClass()

下面的例子演示如何在不同的元素中删除指定的 class 属性:

1
2
3
$("button").click(function () {
$("h1, h2, p").removeClass("blue");
});

toggleClass()

toggleClass() 方法对被选元素进行添加/删除类的切换操作:

1
2
3
$("button").click(function () {
$("h1, h2, p").toggleClass("blue");
});

css() 方法

css() 方法设置或返回被选元素的一个或多个样式属性。

返回 CSS 属性

如需返回指定的 CSS 属性的值,请使用如下语法:

1
css("propertyname");

下面的例子将返回首个匹配元素的 background-color 值:

1
$("p").css("background-color");

设置 CSS 属性

如需设置指定的 CSS 属性,请使用如下语法:

1
css("propertyname", "value");

下面的例子将为所有匹配元素设置 background-color 值:

1
$("p").css("background-color", "yellow");

设置多个 CSS 属性

如需设置多个 CSS 属性,请使用如下语法:

1
2
3
4
5
css({
"propertyname": "value",
"propertyname": "value",

});

下面的例子将为所有匹配元素设置 background-colorfont-size

1
2
3
4
$("p").css({
"background-color": "yellow",
"font-size": "200%"
});

尺寸

通过 jQuery,可以很容易地处理元素和浏览器窗口的尺寸。

jQuery 提供多个处理尺寸的重要方法:

  • width()
  • height()
  • innerWidth()
  • innerHeight()
  • outerWidth()
  • outerHeight()

尺寸示意图

width() 和 height()

width() 方法设置或返回元素的宽度(不包括内边距、边框或外边距)。

height() 方法设置或返回元素的高度(不包括内边距、边框或外边距)。

下面的例子返回指定的 <div> 元素的宽度和高度:

1
2
3
4
5
6
$("button").click(function () {
var txt = "";
txt += "Width: " + $("#div1").width() + "</br>";
txt += "Height: " + $("#div1").height();
$("#div1").html(txt);
});

innerWidth() 和 innerHeight()

innerWidth() 方法返回元素的宽度(包括内边距)。

innerHeight() 方法返回元素的高度(包括内边距)。

下面的例子返回指定的 <div> 元素的 inner-width/height:

1
2
3
4
5
6
$("button").click(function () {
var txt = "";
txt += "Inner width: " + $("#div1").innerWidth() + "</br>";
txt += "Inner height: " + $("#div1").innerHeight();
$("#div1").html(txt);
});

outerWidth() 和 outerHeight()

outerWidth() 方法返回元素的宽度(包括内边距和边框)。

outerHeight() 方法返回元素的高度(包括内边距和边框)。

下面的例子返回指定的 <div> 元素的 outer-width/height:

1
2
3
4
5
6
$("button").click(function () {
var txt = "";
txt += "Outer width:" + $("#div1").outerWidth() + "</br>";
txt += "Outer height:" + $("#div1").outerHeight();
$("#div1").html(txt);
});

outerWidth(true) 方法返回元素的宽度(包括内边距、边框和外边距);outerHeight(true) 方法返回元素的高度(包括内边距、边框和外边距)。

遍历

什么是遍历?

jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素。以某项选择开始,并沿着这个选择移动,直到抵达期望的元素为止。

下图展示了一个家族树。通过 jQuery 遍历,能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先)、向下移动(子孙)、水平移动(同胞)。这种移动被称为对 DOM 进行遍历。

DOM 家族树

  • <div> 元素是 <ul> 的父元素,同时是其中所有内容的祖先。
  • <ul> 元素是 <li> 元素的父元素,同时是 <div> 的子元素。
  • 左边的 <li> 元素是 <span> 的父元素、<ul> 的子元素,同时是 <div> 的后代。
  • <span> 元素是 <li> 的子元素,同时是 <ul><div> 的后代。
  • 两个 <li> 元素是同胞(拥有相同的父元素)。
  • 右边的 <li> 元素是 <b> 的父元素、<ul> 的子元素,同时是 <div> 的后代。
  • <b> 元素是右边的 <li> 的子元素,同时是 <ul><div> 的后代。

祖先是父、祖父、曾祖父等等。后代是子、孙、曾孙等等。同胞拥有相同的父。

遍历 DOM

jQuery 提供了多种遍历 DOM 的方法。

遍历方法中最大的种类是树遍历(tree-traversal)。

祖先遍历

祖先是父、祖父或曾祖父等等。

通过 jQuery,能够向上遍历 DOM 树,以查找元素的祖先。

parent()

parent() 方法返回被选元素的直接父元素。

该方法只会向上一级对 DOM 树进行遍历。

下面的例子返回每个 <span> 元素的的直接父元素:

1
2
3
$(document).ready(function () {
$("span").parent();
});

parents()

parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 (<html>)。

下面的例子返回所有 <span> 元素的所有祖先:

1
2
3
$(document).ready(function () {
$("span").parents();
});

也可以使用可选参数来过滤对祖先元素的搜索。

下面的例子返回所有 <span> 元素的所有祖先,并且它是 <ul> 元素:

1
2
3
$(document).ready(function () {
$("span").parents("ul");
});

parentsUntil()

parentsUntil() 方法返回介于两个给定元素之间的所有祖先元素。

下面的例子返回介于 <span><div> 元素之间的所有祖先元素:

1
2
3
$(document).ready(function () {
$("span").parentsUntil("div");
});

后代遍历

后代是子、孙、曾孙等等。

通过 jQuery,能够向下遍历 DOM 树,以查找元素的后代。

children()

children() 方法返回被选元素的所有直接子元素。

该方法只会向下一级对 DOM 树进行遍历。

下面的例子返回每个 <div> 元素的所有直接子元素:

1
2
3
$(document).ready(function () {
$("div").children();
});

也可以使用可选参数来过滤对子元素的搜索。

下面的例子返回类名为“1”的所有 <p> 元素,并且它们是 <div> 的直接子元素:

1
2
3
$(document).ready(function () {
$("div").children("p.1");
});

find()

find() 方法返回被选元素的后代元素,一路向下直到最后一个后代。

下面的例子返回属于 <div> 后代的所有 <span> 元素:

1
2
3
$(document).ready(function () {
$("div").find("span");
});

下面的例子返回 <div> 的所有后代:

1
2
3
$(document).ready(function () {
$("div").find("*");
});

同胞遍历

同胞拥有相同的父元素。

通过 jQuery,能够在 DOM 树中遍历元素的同胞元素。

siblings()

siblings() 方法返回被选元素的所有同胞元素。

下面的例子返回 <h2> 的所有同胞元素:

1
2
3
$(document).ready(function () {
$("h2").siblings();
});

也可以使用可选参数来过滤对同胞元素的搜索。

下面的例子返回属于 <h2> 的同胞元素的所有 <p> 元素:

1
2
3
$(document).ready(function () {
$("h2").siblings("p");
});

next()

next() 方法返回被选元素的下一个同胞元素。

该方法只返回一个元素。

下面的例子返回 <h2> 的下一个同胞元素:

1
2
3
$(document).ready(function () {
$("h2").next();
});

nextAll()

nextAll() 方法返回被选元素的所有跟随的同胞元素。

下面的例子返回 <h2> 的所有跟随的同胞元素:

1
2
3
$(document).ready(function () {
$("h2").nextAll();
});

nextUntil()

nextUntil() 方法返回介于两个给定参数之间的所有跟随的同胞元素。

下面的例子返回介于 <h2><h6> 元素之间的所有同胞元素:

1
2
3
$(document).ready(function () {
$("h2").nextUntil("h6");
});

prev()、prevAll() 和 prevUntil()

prev()prevAll() 以及 prevUntil() 方法的工作方式与上面的方法类似,只不过方向相反而已:它们返回的是前面的同胞元素(在 DOM 树中沿着同胞元素向前遍历,而不是向后)。

过滤

三个最基本的过滤方法是:first()last()eq(),它们允许基于其在一组元素中的位置来选择一个特定的元素。

其他过滤方法,比如 filter()not() 允许选取匹配或不匹配某项指定标准的元素。

first()

first() 方法返回被选元素的首个元素。

下面的例子选取首个 <div> 元素内部的第一个 <p> 元素:

1
2
3
$(document).ready(function () {
$("div p").first();
});

last()

last() 方法返回被选元素的最后一个元素。

下面的例子选择最后一个 <div> 元素中的最后一个 <p> 元素:

1
2
3
$(document).ready(function () {
$("div p").last();
});

eq()

eq() 方法返回被选元素中带有指定索引号的元素。

索引号从 0 开始,因此首个元素的索引号是 0 而不是 1。下面的例子选取第二个 <p> 元素(索引号 1):

1
2
3
$(document).ready(function () {
$("p").eq(1);
});

filter()

filter() 方法允许规定一个标准。不匹配这个标准的元素会被从集合中删除,匹配的元素会被返回。

下面的例子返回带有类名“intro”的所有 <p> 元素:

1
2
3
$(document).ready(function () {
$("p").filter(".intro");
});

not()

not() 方法返回不匹配标准的所有元素,正好与 filter() 相反。

下面的例子返回不带有类名“intro”的所有 <p> 元素:

1
2
3
$(document).ready(function () {
$("p").not(".intro");
});


 评论