《锋利的jQuery(第2版)》笔记-第2章-jQuery选择器
选择器是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选择器的更多相关文章
- jquery源码学习笔记(一)jQuery的无new构建
本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...
- JQuery攻略读书笔记---第2章 数组
2 数组2.8 创建对象数组循环数组2.9 数组排序 2 数组 2.8 创建对象数组 //数组化对象 var student =[ { "role":101, "na ...
- 《C Primer Plus》第六版笔记--7~10章
目录 第七章 C控制语句:分支和跳转 第八章 字符输入/输出和输入验证 第九章 函数 第十章 数组和指针 第七章 C控制语句:分支和跳转 if else 用法 if (expression) //ex ...
- 《C Primer Plus》第六版笔记--4~6章
目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...
- 《C Primer Plus》第六版笔记--1~3章
目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...
- 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 ...
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)
一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-001Hibernate映射继承的方法
There are four different strategies for representing an inheritance hierarchy: Use one table per co ...
- 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 ...
随机推荐
- 运行Maven工程总是报错:No goals have been specified for this build
Error info: No goals have been specified for this build. You must specify a valid lifecycle phase or ...
- WPF 自定义搜索框
控件中的搜索图标下载地址:http://www.easyicon.net/1183666-Search_icon.html 搜索框设计过程比较简单: 1.先定义一个Rectangle作为背景 2. ...
- Spring 框架的架包分析、功能作用、优点,及jar架包简介
Spring 框架的架包详解 Spring的作用 Spring的优势 由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...
- [LeetCode] Container With Most Water 装最多水的容器
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- Url重写——伪静态实现
简述: 在我们浏览网站的时候,很多都是以.html结尾的.难道这些都是静态网页么?其实不是的,它们很多是伪静态 那么什么是伪静态?顾名思义,就是假的静态页面.通过某种设置让你看成是静态的. Q:为何要 ...
- 【教程】CDQ套CDQ——四维偏序问题
前言 上一篇文章已经介绍了简单的CDQ分治,包括经典的二维偏序和三维偏序问题,还有带修改和查询的二维/三维偏序问题.本文讲介绍多重CDQ分治的嵌套,即多维偏序问题. 四维偏序问题 给定N( ...
- git 命令学习
last-update: 2016年10月27日 1. git stash 简短描述 当你正在进行项目中某一部分的工作,但是里面的东西处于一个比较杂乱的状态,但是却想要切换到其他分支.问题是,你不想提 ...
- Python的多线程(threading)与多进程(multiprocessing )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
- NPOI导出数据,设置格式,锁定单元格
代码包括: 1:导出多个sheet 2:设置单元格格式 3:合并单元格 4:下拉框选项 5:输入数字限制 6:锁定单元格 static void Main(string[] ar ...
- java面向对象---成员变量和成员函数
//成员变量 1.类定义了对象中所具有的变量,这些变量称作成员变量 2.每个对象都有自己的变量,和同一个类的其他对象的分开的 //函数与成员变量 1.在函数中可以直接写成员变量的名字来访问成员变量,那 ...