一、简介
jQuery的选择器语法主要是基于CSS语法(早期版本还支持一部分XPath语法,因为效率等原因后期去除,但可以通过插件来使用),另外W3C积极推进js原生的Selector API 规定了querySelector和querySelectorAll方法,目前大部分主流浏览器提供支持(IE需8以上),jQuery内部也有应用querySelectorAll
相关知识参考:
http://www.w3.org/TR/css3-selectors/
http://www.w3.org/TR/xpath20/
http://www.w3.org/TR/selectors-api/
二、分类
jQuery选择器分为基本选择器、层次选择器、过滤选择器和表单选择器。
1.基本选择器:jQuery中最常用的选择器,也是最简单的选择器,它通过id、class、和标签名来查找DOM元素。在网页中,每个id名称只能使用一次,class允许重复使用。
jQuery的基本选择器 | |||
选择器 |
描述 |
返回 |
示例 |
#id |
根据给定的id匹配一个元素 |
单个元素 |
$("#test")选取id为test的元素 |
.class |
根据给定的类名匹配元素 |
集合元素 |
$(".test")选取所有class为test的元素 |
element |
根据给定的元素名匹配元素 |
集合元素 |
$("p")选取所有的<p>元素 |
* |
匹配所有元素 |
集合元素 |
$("*")选取所有的元素 |
selector1,selector2,...,selectorN |
将每一个选择器匹配到的元素合并后一起返回 |
集合元素 |
$("div,span,p.myClass")选取所有<div>,<span>和拥有class为myClass的<p>标签的一组元素 |
2.层次选择器:如果想通过DOM元素之间的层次关系来获取特定元素,例如后代元素、子元素、相邻元素和兄弟元素等,那么层次选择器是一个非常好的选择。
jQuery的层次选择器 | |||
选择器 |
描述 |
返回 |
示例 |
$("ancestor descendant") |
选取ancestor元素里的所有descendant(后代)元素 |
集合元素 |
$("div span")选取<div>里的所有<span>元素 |
$("parent>child") |
选取parent元素下的child(子)元素,与$("ancestor descendant")有区别,$("ancestor descendant")选择的是后代元素 |
集合元素 |
$("div>span")选取<div>元素下元素名是<span>的子元素 |
$("prev+next") |
选取紧接在prev元素后的next元素 |
集合元素 |
$(".one+div")选取class为one的下一个<div>元素 |
$("prev~siblings") |
选取prev元素之后的所有siblings元素 |
集合元素 |
$("#two~div")选取id为two的元素后面的所有<div>兄弟元素 |
3.过滤选择器:主要是通过特定的过滤规则来筛选出所需的DOM元素,过滤规则与CSS中的伪类选择器语法相同,即选择器都以一个冒号(:)开头。按照不同的过滤规则,过滤选择器可以分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过滤和表单对象属性过滤选择器。
1) 基本过滤
jQuery的基本过滤选择器 | |||
选择器 |
描述 |
返回 |
示例 |
:first |
选取第1个元素 |
单个元素 |
$("div:first")选取所有<div>元素中第1个<div>元素 |
:last |
选取最后一个元素 |
单个元素 |
$("div:last")选取所有<div>元素中最后一个<div>元素 |
:not(selector) |
去除所有与给定选择器匹配的元素 |
集合元素 |
$("input:not(.myClass)")选取class不是myClass的<input>元素 |
:even |
选取索引是偶数的所有元素,索引从0开始 |
集合元素 |
$("input:even")选取索引是偶数的<input>元素 |
:odd |
选取索引是奇数的所有元素,索引从0开始 |
集合元素 |
$("input:odd")选取索引是奇数的<input>元素 |
:eq(index) |
选取索引等于index的元素(index从0开始) |
单个元素 |
$("input:eq(1)")选取索引等于1的<input>元素 |
:gt(index) |
选取索引大于index的元素(index从0开始) |
集合元素 |
$("input:gt(1)")选取索引大于1的<input>元素(注:大于1,而不包括1) |
:lt(index) |
选取索引小于index的元素(index从0开始) |
集合元素 |
$("input:lt(1)")选取索引小于1的<input>元素(注:小于1,而不包括1) |
:header |
选取所有的标题元素,例如h1,h2,h3等等 |
集合元素 |
$(":header")选取网页中所有的<h1>,<h2>,<h3>...... |
:animated |
选取当前正在执行动画的所有元素 |
集合元素 |
$("div:animated")选取正在执行动画的<div>元素 |