浏览器对 CSS selectors 的支持情况
CSS 中可以使用 CSS selectors
大多数浏览器对 CSS 支持都不错
少数老式浏览器对 CSS 支持不好
IE6 支持几乎所有的普通 Selectors
IE6 对个别的普通 Selectors 支持不好
:hover 仅 a 元素可以使用
:active 仅 a 元素可以使用
:focus IE6 不支持
IE6 不支持高级 Selectors
jQuery 中可以使用 CSS selectors
几乎所有浏览器都支持普通 Selectors
几乎所有浏览器都支持高级 Selectors
HTML 元素的状态
a 元素特有的状态
link
链接未访问
visited
链接已访问
所有的元素都有的状态
hover
鼠标悬浮于元素之上
active
元素被点击
鼠标按键不松开
focus
元素成为焦点
jQuery Object
简介
jQuery Object 是一个 DOM 元素的集合
使用
jQuery Object 的构造
$ 或 jQuery 函数
主要用途
将 DOM 元素转换为 jQuery Object
$(document)
选择(匹配)元素
$("a")
返回值
总是返回 jQuery Object
说明
jQuery 工厂函数用来创建 jQuery Object
jQuery 对象与 DOM 元素
jQuery Object 中获取 DOM 元素(对象) 或者 jQuery Object 转换为 DOM 对象数组
get
用途
获得匹配的 DOM 元素
参数
可选参数 index
返回值
调用时未使用参数
返回 DOM 元素的集合(一个数组 Array)
调用时使用 index 参数
返回一个 DOM 元素
范例
var arr = $("p").get();
说明
jQuery 提供了一种简洁的方式,即使用“[]”来访问 jQuery object $("p")[0] 等价于 $("p").get(0)
DOM 元素(对象)转换 jQuery Object
做法
通过 $(DOMObject) 来构建包含 DOMObject 的 jQuery Object
范例
$(document) // 把 document 对象转换为 jQuery Object
用途
DOM 元素转换为 jQuery Object 才可以使用 jQuery 的跨平台方法
实现
jQuery Object 使用了 Array-like 的实现方式 参考《JavaScript: The Definitive Guide, 5th Edition》 7.8
jQuery Selectors
selectors 的类型
CSS Selectors(CSS1 ~ CSS3)
普通 Selectors
type selectors
组成
元素的名称
用途
选择所有的某种类型的元素
范例
p { color: red; }
descendant selectors
组成
多个元素的名称
元素名称间使用空格分离
用途
选择所有的某种类型的元素的所有后代元素(区别于子元素)
范例
form legend { color: red; }
id / class selectors
组成
特殊符号“#”/“.”表示定义一个 id / class selectors
id / class 属性的值
用途
选择特定的 id / class 属性值的元素
范例
#id { color: red;} .class { color: red; }
universal selectors
组成
特殊符号“*” 表示定义一个 universal selectors
用途
选择所有的元素
范例
* { color: red; }
pseudo-class selectors(:selector)
组成
特殊符号“:” 表示一个 pseudo-class selectors 的开始
用途
link pseudo-class selectors(仅用于 a 元素)
:link 链接未访问状态时
:visited 链接已访问状态时
dynamic pseudo-class selectors(用于所有元素)
:hover 悬浮状态时
:active 激活状态时
:focus 焦点状态时
范例
a:link, a:visited { color: black; } a:hover, a:active { color: blue; background-color: yellow; }
高级 Selectors(CSS2 ~ CSS3)
child selectors
组成
多个元素的名称
元素名称间使用 > 分离
用途
选择所有的某种类型的元素的所有子元素(区别于后代元素)
范例
div > p { color: red; }
adjacent sibling selectors
组成
多个元素的名称
元素名称间使用 + 分离
用途
用于在两个元素中选择一个元素
这两个元素有相同的父元素
这两个元素相邻
这两个元素的后者被选择
范例
div + p { color: red; }
attribute selector
组成
[property]
用途
根据元素是否存在某属性来选择元素
根据元素是否存在某属性和值来选择元素
范例
[title] {cursor: help;} // 所有带有 title 属性的元素都被选择
[title='Second'] {cursor: help;} // 所有带有 title 属性且值为 Second 的元素被选择
h1[title='Second']:hover {cursor: help;} // 选择 h1 元素,当 h1 元素的 title 属性值为 Second 且处于悬浮状态时被选择
jQuery 自定义 Selectors(语法同于 CSS pseudo-class selectors)
用于 table 的 selectors
:odd / :even
组成
在 selectors 后接 :odd / :even
用途
匹配索引为奇数(odd)/ 偶数(even)的元素
范例
$("tr:odd").css("color", "blue"); // 被选择的元素为 tr 元素集合中的索引为奇数的元素,索引从 0 开始
用于 form 的 selectors
:input
用途
选择所有的 input、textarea、button 元素
:text :checkbox :radio :image :submit :reset :password :file :button
组成
字符“:”加上 input 元素 type 的属性值
用途
根据 input 元素 type 属性值选择元素
范例
:text 选择器选择 <input type="text">
:checked
用途
选择被选中的 Check box 或者 Radio button
:selected
用途
选择被选中的 Option 元素
:enabled
用途
选择 form 中 enabled 的元素
:disabled
用途
选择 form 中 disabled 的元素
用于所有元素的 selectors
:eq
用途
通过索引来选择元素
范例
$("td:eq(2)").css("color", "blue"); // 被选择的元素为 td 元素集合中的第 3 个 td 元素,这里索引从 0 开始
语法
$("selectors")
jQuery("selectors")
相关术语
父、子、后代、祖先
子元素对应父元素
后代元素对应祖先元素
元素(元素一词未特殊指明则表示 HTML 元素)
HTML 元素
开始标签(tags)
内容(contents)
结束标签(tags)
DOM 元素
简介
DOM 元素是一个对象
建议
因为 DOM 元素在各个浏览器实现可能有差别 因此不建议直接操作 DOM 元素(所有浏览器都支持的属性除外)
在 jQuery 的遍历方法中,this 被设置为 DOM 元素 这个时候,this 一般这样用: this.value 最好改为 $(this).val(); 也就是使用 jQuery 的方法而非直接操作 DOM 元素 (包装 DOM 元素以便使用 jQuery 方法的手段为 $(element))
通过 jQuery 特定的方法遍历 DOM
Filtering 方法
filter method
参数
可以带一个参数,为一个函数 fn
fn 带有一个参数为 DOM 元素的索引值
$("a").filter(function(index) { ... }
fn 中的 this 为 DOM 元素
可以带一个参数,为一个字符串表达式 expr
用途
只有 fn 函数返回为非 false 值时,DOM 元素才被加入到查找(匹配)集合中
范例
范例 1
范例 2
Finding 方法
查找 siblings
next method
用途
获得 DOM 元素集合中每个元素的后一个兄弟元素组成的集合(此集合不含重复元素)
范例
$("a").next().css("color", "red");
nextAll method
用途
获得 DOM 元素集合中每个元素后的所有兄弟元素组成的集合(此集合不含重复元素)
范例
$("a").nextAll().css("color", "red");
prev method
prevAll method
siblings method
用途
获得 DOM 元素集合中每个元素的所有唯一兄弟元素组成的集合(等同于 nextAll + prevAll)
查找父元素
parent method
用途
获得 DOM 元素集合中每个元素的父亲元素组成的集合(此集合不含重复元素)
查找子元素
children method
用途
获得 DOM 元素集合中每一个元素的子元素组成的集合(此集合不含重复元素)
Chaining 方法
andSelf method
用途
添加先前的选择的 DOM 元素(集)到当前元素集合中
范例
end method
用途
改变当前选择的 DOM 元素集合到先前的状态,如果当前选择的元素集合没有先前状态,那么 end() 得到一个空集合
范例
有关的观念
查找(选择、匹配)得到的是一个 DOM 元素集合而不是一个元素(当然这个集合可以只有一个元素) 这个集合通常是一个 jQuery 对象
每一个 jQuery selectors 表达式匹配到的 DOM 元素集合是一个 jQuery 对象
几乎所有的 jQuery DOM 元素匹配方法返回一个 jQuery 对象
选择得到的 DOM 元素的集合中元素有对应的索引,从 0 开始
通常来说,jQuery 方法保证选择得到的 DOM 元素的集合中元素不重复出现
尽量在查找元素时使用 jQuery 的 Chaining 能力
什么是 Chaining?
一种编写代码的方式:连续调用各个元素的查找方法
好处
代码更加简洁
代码执行效率更加高
范例
$ 是 jQuery 的别名