选择器是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. SQL 语法总结

    学了一个月的java,开始有入门的感觉.这段时间接触到了java的JDBC, 发现学习这部分的内容还是要有SQL的基础,于是花费了几天时间学习了一下SQL语法,并将其总结于下. 选择数据 SELECT ...

  2. 光盘 iso 镜像制作相关命令操作

    1. 安装制作工具 mkisofs yum install mkisofs -y 2. Linux 操作系统镜像 iso 打包 mkisofs -o /root/.iso \ -V mini7 -b ...

  3. 第9章 Shell基础(1)_Shell简介和脚本执行方式

    1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...

  4. angular学习笔记(二十八-附1)-$resource中的资源的方法

    通过$resource获取到的资源,或者是通过$resource实例化的资源,资源本身就拥有了一些方法,$save,$delete,$remove,可以直接调用来保存该资源: 比如有一个$resour ...

  5. pcl曲面重建模块-poisson重建算法示例

    poisson曲面重建算法 pcl-1.8测试通过 #include <iostream> #include <pcl/common/common.h> #include &l ...

  6. GO语言总结(2)——基本类型

    上篇博文总结了Go语言的基础知识——GO语言总结(1)——基本知识  ,本篇博文介绍Go语言的基本类型. 一.整型 go语言有13种整形,其中有2种只是名字不同,实质是一样的,所以,实质上go语言有1 ...

  7. [LeetCode] Odd Even Linked List 奇偶链表

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...

  8. [LeetCode] Valid Phone Numbers 验证电话号码

    Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bas ...

  9. VirtualBox内ubuntu10.10系统和windows7 共享文件夹

    材料 virtualbox 4.3.0 ubuntu10.10 window 7 sp1 步骤 1.安装好虚拟机和操作系统,(具体步骤网上有很多) 2.安装虚拟机的增强功能包, 安装完成手动系统重新, ...

  10. pureftp在centos下与MySQL搭配使用

    概述 pure-ftpd是linux下的一个ftp服务端,据说安全性较高.我在centos6下用yum安装pure-ftpd,并配置了通过MySQL进行用户的增删改查,以及对应到apache的web目 ...