选择器是jQuery的根基,在jQuery中,对事件处理、遍历DOM和Ajax操作都依赖于选择器。熟练使用选择器,不仅可以简化代码,而且可以达到事半功倍的效果。


2.1 jQuery选择器是什么

1. CSS选择器

CSS是一项出色的技术,它使得网页的结构和表现样式完全分离。利用CSS样式可以轻松地对某个元素添加样式而不改动HTML结构,只需要添加不同的CSS规则,就可以得到各种不同样式的网页。

要使某个样式应用于特定的HTML元素,首先就是需要先找到该元素。在CSS中,执行这一任务的表现规则成为CSS选择器。

表2-1,列出的常用CSS选择器:①标签选择器,②ID选择器,③类选择器,④群组选择器,⑤后代选择器,⑥统配选择器,几乎所有主流浏览器都几乎支持以上6中选择器。

此外CSS中还有⑦伪类选择器,⑧子选择器,⑨临近选择器,⑩属性选择器等,不过并非所有的主流浏览器都完全支持。

2. jQuery选择器

jQuery选择器写法和CSS选择器写法十分类似,只不过两者作用效果不同,CSS选择器找到元素后是添加样式,而jQuery选择器找到元素后是添加行为。需要特别注意的是,jQuery中涉及操作CSS样式的部分比单纯的CSS功能更为强大,并且拥有跨浏览器的兼容性。

2.2 jQuery选择器的优势

1. 简洁的写法

在jQuery中,$()作为选择器函数使用。

2. 支持CSS1到CSS3选择器

jQuery支持CSS1、CSS2、的全部和CSS3的部分选择器,同时它也有少量独有的选择器。

3. 完善的处理机制

$(“#ID”)获取的永远是对象,即使网页上没有此元素。

2.3 jQuery选择器

jQuery选择器分为基本选择器、层次选择器、过滤选择器、表单选择器。

2.3.1 基本选择器

基本选择器是jQuery中最常用的选择器,也是最简单的选择器。它通过元素id、class和标签名等来查找DOM元素。

2.3.2 层次选择器

通过DOM元素之间的层次关系来获取特定关系,例如后代元素、子元素、相邻元素、同辈元素。

可以使用next()方法来代替$(“prev+next”)选择器。

可以使用nextAll()方法来代替$(“prev~siblings”)选择器。$(“prev~siblings”)选择器只能选择“prev”元素后面的同辈<div>元素,而siblings()方法与前后位置无关,只要是同辈节点就能匹配。

2.3.3 过滤选择器

过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM元素,规则与CSS中的伪类选择器语法相同,都以一个冒号(:)开头。按照不同规则,过滤选择器分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过滤和表单对象属性过滤选择器。

1. 基本过滤选择器

:focus                  选取当前获取焦点的元素         集合元素      $(‘:focus’)选取当前获取焦点的元素

2. 内容过滤选择器

内容过滤选择器的过滤规则主要体现在它包含的子元素或者文本内容上。

3. 可见性过滤选择器

可见性过滤根据元素的可见和不可见状态来选择相应的元素。

在可见选择器中,需要注意的是:hidden,它不仅包括样式属性display为’none’的元素,也包括文本隐藏(<input type=’hidden’ />)和visibility:hidden之类的元素。

4. 属性过滤选择器

属性选择器的顾虑规则是通过元素的属性俩获取相应的元素。

5. 子元素过滤选择器

子元素过滤选择器的过滤规则相对于其他选择器稍微有点复杂,重点在于区分清楚父元素与子元素。

:nth-child()选择器是很常用的子元素过滤选择器,详细功能如下:

(1):nth-child(even)能选取每个父元素下的索引值是偶数的元素。

(2):nth-child(odd)能选取每个父元素下的索引值是奇数的元素。

(3):nth-child(2)能选取每个父元素下的索引值等于2的元素。

(4):nth-child(3n)能选取每个父元素下的索引值是3的倍数的元素,(n从1开始)。

(5):nth-child(3n+1)能选取每个父元素下的索引值是(3n+1)的倍数的元素,(n从1开始)。

6. 表单对象属性过滤选择器

此选择器主要是对所选择的表单元素进行过滤,例如选择被选中的下拉框,多选框等元素。

2.4 应用jQuery改写实例

2.5 选择器中的一些注意事项

2.5.1 选择器中含有特殊符号的注意事项

1. 选择器中含有“.”、“#”、“(”或“]”等特殊字符

按照W3C规定,属性值中是不能含有这些特殊字符的,但是在实际项目中偶尔会遇到表达式含有“#”和“.”等特殊字符。如果按照普通的方式去处理的话就会出错。解决此类错误的方法就是使用转义符转义。

HTML代码如下:

<div id="id#b">bb</div>
<div id="id[1]">cc</div>

如果按照普通样式来获取,例如:

$("#id#b");
$("#id[1]");

以上代码不能正确获取元素,正确写法如下:

$("#id\\#b");
$("#id\\[1\\]");

2. 属性选择器的@符号问题

@符号在版本1.3.1中放弃了,所以可以不考虑使用它。

2.5.2 选择器中含有空格的注意事项

选择器中的空格是不容忽视的,多一个空格或者少一个空格也许会得到不同的结果。

  例子如下:

<div class="test">
    <div style="display:none;">aa</div>
    <div style="display:none;">bb</div>
    <div style="display:none;">cc</div>
    <div class="test" style="display:none;">dd</div>
</div>
<div class="test" style="display:none;">ee</div>
<div class="test" style="display:none;">ff</div>

使用如下的jQuery选择器分别俩获取它们。

var $t_a = $('.test :hidden');          //带空格的jQuery选择器
var $t_b = $('.test:hidden');           //不带空格的jQuery选择器
var len_a = $t_a.length;
var len_b = $t_b.length;
$("<p>$('.test :hidden')的长度为" + len_a + "</p>").appendTo("body");     //输出4
$("<p>$('.test:hidden')的长度为" + len_b + "</p>").appendTo("body");      //输出3

  之所以出现不同结果,就是后代选择器与过滤选择器的不同。

2.6 案例研究-某网站品牌列表的效果

2.7 其他选择器

2.7.1 jQuery提供的选择器的扩展

2.7.2 其他使用CSS选择器的方法

2.8 小结


END

《锋利的jQuery(第2版)》笔记-第2章-jQuery选择器的更多相关文章

  1. jquery源码学习笔记(一)jQuery的无new构建

    本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...

  2. JQuery攻略读书笔记---第2章 数组

      2 数组2.8 创建对象数组循环数组2.9 数组排序 2 数组 2.8 创建对象数组 //数组化对象 var student =[ { "role":101, "na ...

  3. 《C Primer Plus》第六版笔记--7~10章

    目录 第七章 C控制语句:分支和跳转 第八章 字符输入/输出和输入验证 第九章 函数 第十章 数组和指针 第七章 C控制语句:分支和跳转 if else 用法 if (expression) //ex ...

  4. 《C Primer Plus》第六版笔记--4~6章

    目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...

  5. 《C Primer Plus》第六版笔记--1~3章

    目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...

  6. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-003Table per concrete class with unions(@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)、<union-subclass>)

    一.代码 1. package org.jpwh.model.inheritance.tableperclass; import org.jpwh.model.Constants; import ja ...

  7. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...

  8. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-001Hibernate映射继承的方法

    There are four different strategies for representing an inheritance hierarchy: Use one table per co ...

  9. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-007UserTypes的用法(@org.hibernate.annotations.Type、@org.hibernate.annotations.TypeDefs、CompositeUserType、DynamicParameterizedType、、、)

    一.结构 二.Hibernate支持的UserTypes接口  UserType —You can transform values by interacting with the plain JD ...

随机推荐

  1. [hadoop in Action] 第3章 Hadoop组件

    管理HDFS中的文件 分析MapReduce框架中的组件 读写输入输出数据   1.HDFS文件操作   [命令行方式]   Hadoop的文件命令采取的形式为: hadoop fs -cmd < ...

  2. [原创]最近使用React-Native的适配问题和警告搜集

    主要记录一下最近使用RN 0.29.2版本遇到的适配的坑以及部分警告的解法. 适配类: 安卓输入框圆角.边框颜色.粗细等无法设置成功,需要在TextInput外面新增一个View设置圆角,TextIn ...

  3. 树莓派debian配置lamp【解决apache不显示php】

      Apache + MySql + Php. 1.安装Apache Apache可以用下面的命令来安装 sudo apt-get install apache2 Apache默认路径是/var/ww ...

  4. After the exam

    离散数学考完啦!!!自我感觉还行,或许得不到高分,但是过的话是没问题了.(但愿成绩出来后不打脸) 持续了两周的复习,告一段落了.那么,今天就休息休息吧. 今天阴有雨,走过的地儿都是湿漉漉.滑溜溜的.这 ...

  5. Linux之shell篇

    shell是用户与系统交互的界面,这是基本方式之一.标准的shell为bash. shell的操作: 显示所有使用过的命令:history. 执行最近执行过的一条指令:!!.首先会给出执行的是哪一条指 ...

  6. [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  7. StringHelper

    /// <summary> /// 文本取左边 /// </summary> /// <param name="str"></param& ...

  8. __new__静态方法

    __new__静态方法 新式类都有一个__new__的静态方法,它的原型是object.__new__(cls[, ...]) cls是一个类对象,当你调用C(*args, **kargs)来创建一个 ...

  9. ActiveMQ与spring集成实现Queue模式

    ActiveMQ可以和spring很好的集成,下面我们来看看,如何做个集成的demo. (1)pom.xml引入相关jar <!-- spring相关 begin --> <depe ...

  10. php代码小实例

    php多图上传 <html> <meta http-equiv="Content-Type" content="text/html; charset=u ...