选择器是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. OSI七层模型详解 TCP/IP协议

      总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...

  2. CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装

    每次搭建新服务器,都要来来回回把这些包再装一下,来来回回搞了不下20遍了吧,原来都是凭经验,配置过程中重复入坑是难免的,故写此文做个备忘.虽然有像xampp这样的集成包,但是在生产环境的Linux发行 ...

  3. linux top命令结果参数详解

    非常详细的top结果说明文档. http://www.cnblogs.com/sbaicl/articles/2752068.html http://bbs.linuxtone.org/forum.p ...

  4. [bzoj3932][CQOI2015][任务查询系统] (主席树)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  5. [开源].NET数据库访问框架Chloe.ORM

    扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...

  6. 侯捷老师C++大系之C++面向对象开发:(一)不带指针的类:Complex复数类的实现过程

    一.笔记1.C++编程简介 2.头文件与类的声明 防卫式声明#ifndef __COMPLEX__#define __COMPLEX__ …… #endif头文件的布局模板简介template< ...

  7. spring 拦截器

    1.mvc.xml <!-- 自定义拦截链配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping p ...

  8. iOS推送流程

    1. 在apple开发者帐号上创建一个BundleID,创建证书或者Xcode上都是用这个BundleID(例如com.mycompany.pushDemo) 2. 代码层面: 在capability ...

  9. vue.js之过渡效果-css

    概述 vuejs的过渡效果可以让我们的页面元素在出现和消失时实现过渡.官方文档这样描述过渡效果的方式: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Anima ...

  10. python基础补漏-04-常用函数

    ----lambda 首先我们说,很遗憾 在python中lambda 仅仅只是一个表达式 那么如何去使用呢? 这个是lambda最简单的使用方式  一般跟map一起配合使用 --map (fun,l ...