0

0

jquery常用选择器种类及其使用原理的介绍

伊谢尔伦

伊谢尔伦

发布时间:2017-06-16 10:23:31

|

1959人浏览过

|

来源于php中文网

原创

 jquery选择器、css3选择器各种各样的选择器,作为非常灵活的jquery选择器到底如何使用呢?

一、对于jQuery选择器基本用法

在CSS3选择器标淮草案定义的选择器语法中,jQuery支持相当完整的一套子集,同时还添加了一些非标准但很有用的伪类。注意:本节讲述的是 jQuery选择器。其中有不少选择器(但不是全部)可以在CSS样式表中使用。选择器语法有三层结构。你肯定已经见过选择器中最简单的形式。”#te st”选取id属性为”test”的元素。”blockquote”选取文档中的所有

元素,而”p.note” 则选取所有class属性为”note”的
元素。简单选择器可以组合成“组合选择器”,比如 “p.note>p”和“blockquote i”,只要用组合字符做分隔符就行。简单选择器和组合选择器还可以分组成逗号分隔的列表。这种选择器组是传递给$()函数最常见的形式。在解释组合选择器 和选择器组之前,我们必须先了解简单选择器的语法。

jquery选择器.jpg

1、简单选择器使用

简单选择器的开头部分(显式或隐式地)是标签类型声明。例如,如果只对

元素感兴趣,简单选择器可以用“P”开头。如果选取的元素和标签名无关,则可以使用通配符“*”号来代替。如果选择器没有以标签名或通配符开头,则隐式含有一个通配符。

标签名或通配符指定了备选文档元素的一个初始集。在简单选择器中,标签类型声明之后的部分由零个或多个过滤器组成。过滤器从左到右应用,和书写顺序一致,其中每一个都会缩小选中元素集。下表列举了jQuery支持的过滤器。

jQuery选择过滤器

过滤器 含义

#id 匹配id属性为id的元素。在有效的}ITML文档中,永远不会出现多个元素拥有相同的ID,因此该过滤器通常作为独立选择器来使用

.class 匹配class属性(是一串被解析成用空格分隔的单词列表)含有class单词的所有元素

[attr] 匹配拥有attr属性(和值无关)的所有元素

[attr=val] 匹配拥有attr属性且值为val的所有元素

[attr!=val] 匹配没有attr属性、或attr属性的值不为val的所有元素((jQuery的扩展)

[attr^=val] 匹配attr属性值以val开头的元素

[attr$=val] 匹配attr属性值以val结尾的元素

[attr*=val] 匹配attr属性值含有val的元素

[attr~=val] 当其attr属性解释为一个由空格分隔的单词列表时,匹配其中包含单词val的元素。因此选择器“p.note”与“p [class~=note]”相同

[attr|=val] 匹配attr属性值以val开头且其后没有其他字符,或其他字符是以连字符开头的元素

:animated 匹配正在动画中的元素,该动画是由jQuery产生的

:button 匹配

:checkbox 匹配元素( jQuery的扩展),当显式带有input标签前缀”input:checkbox”时,该过滤器更高效

:checked 匹配选中的input元素

:contains(text) 匹配含有指定text文本的元素(jQuery的扩展)。该过滤器中的圆括号确定了文本的范围—无须添加引号。被过滤的元素的文本是由textContent或innerText属性来决定的—这是原始文档文本,不带标签和注释

:disabled 匹配禁用的元素

:empty 匹配没有子节点、没有文本内容的元素

:enabled 匹配没有禁用的元素

:eq(n) 匹配基于文档顺序、序号从0开始的选中列表中的第n个元素(jQuery的扩展)

:even 匹配列表中偶数序号的元素。由于第一个元素的序号是0,因此实际上选中的是第1个、第3个、第5个等元素(jQuery的扩展)

:file 匹配元素(jQuery的扩展)

:first 匹配列表中的第一个元素。和“:eq(0)”相同(jQuery的扩展)

:first-child 匹配的元素是其父节点的第一个子元素。注意:这与“:first”不同

:gt(n) 匹配基于文档顺序、序号从0开始的选中列表中序号大于n的元素( jQuery的扩展)

:has(sel) 匹配的元素拥有匹配内嵌选择器sel的子孙元素

:header 匹配所有头元素:

,

,

,

,

(jQuery的扩展)

:hidden 匹配所有在屏幕上不可见的元素:大体上可以认为这些元素的offsetWidth和offsetHeight为0

:image 匹配元素。注意该过滤器不会匹配jquery常用选择器种类及其使用原理的介绍元素( jQuery的扩展)

:input 匹配用户输入元素:,

:last 匹配选中列表中的最后一个元素(( jQuery的扩展)

:last-child 匹配的元素是其父节点的最后一个子元素。注意:这与“:last”不同

:lt(n) 匹配基于文档顺序、序号从0开始的选中列表中序号小于n的元素( jQuery的扩展)

:not(sel) 匹配的元素不匹配内嵌选择器sel

:nth(n) 与“:eq(n)”相同(jQuery的扩展)

:nth-child(n) 匹配的元素是其父节点的第n个子元素。。可以是数值、单词even,单词odd或计算公式。 使用“:nth-child(even)”来选取那些在其父节点的子元素中排行第2或第4等序号的元素。使用“:nth-child(odd)”来选取那 些在其父节点的子元素中排行第1、第3等序号的元素。

更常见的情况是,n是xn或x n+y这种计算公式,其中x和y是整数,n是字面量n。因此可以用nth-child(3n+1)来选取第1个、第4个、第7个等元素。

注意该过滤器的序号是从1开始的,因此如果一个元素是其父节点的第一个子元素,会认为它是奇数元素,匹配的是3n+1,而不是3n。要和“:even以及“:odd”过滤器区分开来,后者匹配的序号是从0开始的。

:odd 匹配列表中奇数(从0开始)序号的元素。注意序号为1和3的元素分别是第2个和第4个匹配元素( jQuery的扩展)

:only-child 匹配那些是其父节点唯一子节点的元素

:parent 匹配是父节点的元素,这与“:empty”相反(jQuery的扩展)

:password 匹配元素(jQuery的扩展)

:radio 匹配元素( j Query的扩展)

:reset 匹配

:selected 匹配选中的

:submit 匹配

:text 匹配元素(jQuery的扩展)

:visible 匹配所有当前可见的元素:大体上可以认为这些元素的offsetWidth和offsetHeight的值不为0,这和“:hidden”相反

注意:表中列举的部分选择器在圆括号中接受参数。例如,下面这个选择器选取的元素在其父节点的子元素中排行第1或第2等,只要它们含有“JavaScript”单词,就不包含元素。

p:nth-child(3n+1): text (JavaScript):not(:has(a))

通常来说,指定标签类型前缀,可以让过滤器的运行更高效。例如,不要简单使用”:radio”来选取单选框按钮,使用“input:radio”会 更好。ID过滤器是个例外,不添加标签前缀时它会更高效。例如,选择器“#address”通常比更明确的“form#address”更高效。

2、组合选择器用法

使用特殊操作符或“组合符”可以将简单选择器组合起来,表达文档树中元素之间的关系。下表列举了jQuery支持的组合选择器。这些组合选择器与CSS3支持的组合选择器是一样的。

下面是组合选择器的一些例子:

"blockquote i"              //匹配

里的元素

"ol > li"                   //元素是的直接子元素

"#output+*"                 //id="output"元素后面的兄弟元素

"p.note > h1+p"           //紧跟

元素,在

里面

注意组合选择器并不限于组合两个选择器:组合三个甚至更多选择器也是允许的。组合选择器从左到右处理。

3、选择器组合

传递给$()函数(或在样式表中使用)的选择器就是选择器组,这是一个逗号分隔的列表,由一个或多个简单选择器或组合选择器构成。选择器组匹配的元 素只要匹配该选择器组中的任何一个选择器就行。对我们来说,一个简单选择器也可以认为是一个选择器组。下面是选择器组的一些例子:

"h1, h2,h3"             //匹配

,

元素

"#p1, #p2, #p3"         //匹配id为p1, p2或p3的元素

"p.note, p.note"      //匹配class="note"的

元素

"body>p,p.note>p"     //和

子元素

注意:CSS和jQuery选择器语法允许在简单选择器的某些过滤器中使用圆括号,但并不允许使用圆括号来进行更常见的分组。例如,不能把选择器组或组合选择器放在圆括号中并且当成简单选择器:

(h1, h2, h3)+p          //非法

h1+p, h2+p, h3+p        //正确的写法


二、怎样选取

除了$()函数支持的选择器语法,jQuery还定义了一些选取方法。本章中我们已看到过的大部分jQuery方法都是在选中元素上执行某种操作。选取方法不一样:它们会修改选中元素集,对其进行提取、扩充或仅作为新选取操作的起点。

本节描述这些选取方法。你会注意到这些选取方法中的多数提供的功能与选择器语法的功能是一样的。

提取选中元素最简单的方式是按位置提取。first()返回的jQuery对象仅包含选中元素中的第一个,last()返回的jQuery对象则只 包含最后一个元素。更通用的是,eq()方法返回物Query对象只包含指定序号的单个选中元素。(在jQuery 1.4中,负序号也是允许的,会从选区的末尾开始计数。)注意这些方法返回的jQuery对象只含有一个元素。这与常见的数组序号是不一样的,数组序号返 回的单一元素没有经过jQuery包装:

var paras=$("p");

蓝木企业网站系统3.0
蓝木企业网站系统3.0

1.网站主干为 蓝木新闻系统 + 蓝木产品发布系统 + 站点信息管理 + 蓝木留言系统 + 蓝木投票系统。2.后台采用了在线编辑器,可以上传图片,文件等,相信用过在线编辑器的用户都知道其强大的功能。3.可发布产品图片,设置产品类别,4.可以选择数据库中栏目显示在菜单中。5.咨询页面的栏目顺序可以在后台进行顺序设置。6.产品分类页面的栏目顺序也可以在后台进行顺序设置。7.企业介绍等页面顺序也可以在

下载

paras.first()           //仅选取第一个

元素

paras.last()            //仅选取最后一个

paras.eq(1)             //选取第二个

paras.eq(-2)           //选取倒数第二个

paras[1]                //第二个

元素自身

通过位置提取选区更通用的方法是slice()o jQuery的slice()方法与Array.slice()方法类似:前者接受开始和结束序号(负序号会从结尾处计算),返回的jQuery对象包含 从开始到结束序号(但不包含结束序号)处的元素集。如果省略结束序号,返回的对象会包含从开始序号起的所有元素:

$("p").slice(2,5)       //选取第3个、第4个和第5个

元素

$("p").slice(-3)      //选取最后3个

元素

filter()是通用的选区过滤方法,有3种调用方式:

  传递选择器字符串给filter(),它会返回一}jQuery对象,仅包含也匹配该选择器的选中元素。

  传递另一个jQuery对象给filter(),它会返回一个新的jQuery对象,该对象包含这两们Query对象的交集。也可以传递元素数组甚至单一文档元素给filter()。

  传递判断函数给filter(),会为每一个匹配元素调用该函数,filter()则返回一个jQuery对象,仅包含判断函数为true(或任意真值)的元素。在调用判断函数时,this值为当前元素,参数是元素序号。

$("p").filter(".note")        //与$("p.note")一样

$("p").filter($(".note"))     //与$("p.note")一样

$("p").filter(function(idx){return idx%2 == 0})         //与$("p:even")一样

not()方法与filter()一样,除了含义与filter()相反。如果传递选择器字符串给not()它会返回一个新的jQuery对象,该 对象只包含不匹配该选择器的元素。如果传递jQuery对象、元素数组或单一元素给not(),它会返回除了显式排除的元素之外的所有选中元素。如果传递 判断函数给not(),该判断函数的调用就与在filter()中一样,只是返回的jQuery对象仅包含那些使得判断函数返回false或其他假值的元 素:

$("p").not("#header, #footer");        //除了两个特殊元素之外的所有元素

在jQuery 1.4中,提取选区的另一种方式是has()方法。如果传入选择器,has()会返回一个新的jQuery对象,仅包含有子孙元素匹配该选择器的选中元素。如果传入文档元素给has(),它会将选中元素集调整为那些是指定元素祖先节点的选中元素:

$("p").has("a[href]")         //包含链接的段落

add()方法会扩充选区,而不是对其进行过滤或提取。可以将传给$()函数的任何参数(除了函数)照样传给add()方法。add()方法会返回 原来的选中元素,加上传给$()函数的那些参数所选中(或创建)的那些元素。add()会移除重复元素,并对该组合选区进行排序,以便里面的元素按照文档 中的顺序排列:

//选取所有

和所有

元素的等价方式


$("p, p")             //使用选择器组

$("p").add(p)         //给add()传入选择器

$("p").add($("p"))    //给add()传入jQuery对象

var paras = document.getElementsByTagName("p");       //类数组对象

$("p").add(paras);        //给add()传入元素数组

1、恢复到之前的选中元素集

为了实现方法的链式调用,很多jQuery对象的方法最后都会返回调用对象。然而本节讲述的方法都返回新的jQuery对象。可以链式调用下去,但必须清晰地意识到,在链式调用的后面所操作的元素集,可能已经不是该链式调用开始时的元素集了。

实际情况还要复杂些。当这里所描述的选取方法在创建或返回一个新的ejQuery对象时,它们会给该对象添加一个到它派生自的旧jQuery对象的 内部引用。这会创建一个jQuery对象的链式表或栈。end()方法用来弹出栈,返回保存的jQuery对象。在链式调用中调用end()会将匹配元素 集还原到之前的状态。考虑以下代码:

//寻找所有

元素,然后在其中寻找

元素

//高亮显示

元素,然后给

元素添加一个边框

//首先,不使用链式调用

var ps = $("p");

var paras = p.find("p");

paras.addClass("highlight");

ps.css("border", "solid black 1px"); 

//下面展现如何使用链式调用来实现

$("p").find("p").addClass("highlight").end().css("border", "solid black 1px");

//还可以将操作调换顺序来避免调用end()

$("p").css("border", "solid block 1px").find("p").addClass("highlight");

如果想手动定义选中元素集,同时保持与end()方法的兼容,可以将新的元素集作为数组或类数组对象传递给push5tack()方法。指定的元素会成为新的选中元素,之前选中的元素集则会压入栈中,之后可以用end()方法还原它们:

var sel = $("p");             //选取所有

元素

sel.pushStack(document.getElementsByTagName("p"));      //修改为所有

元素

sel.end();                      //还原为

元素

既然我们已经讲解了end()方法及其使用的选区栈,就有最后一个方法需要讲解。andSelf()返回一个新的jQuery对象,包含当前的所有 选中元素,加上之前的所有选中元素(会去除重复的)。andSelf()和add()方法一样,或许“addPrev”是一个更具描述性的名字。作为例 子,考虑上面代码的下述变化:高亮显示

元素及其父节点中的

元素,然后给这些

元素添加边 框:

$("p").find("p").andSelf().           //寻找

,合并起来

addClass("highlight").              //都高亮

end().end().                            //弹出栈两次,返回$("p")

css("border", "solid black 1px");       //给ps添加边框

2.将选中元素集用做上下文

上面描述的filter(). add()、和not()方法会在各自的选中元素集上执行交集、并集和差集运算。jQuery还定义一些其他选取方法可将当前选中元素集作为上下文来使 用。对选中的每一个元素,这些方法会使用该选中元素作为上下文或起始点来得到新的选中元素集,然后返回一个新的jQuery对象,包含所有新的选中元素的 并集。与add()方法类似,会移除重复元素并进行排序,以便元素会按照在文档中出现的顺序排列好。

该类别选取方法中最通用的是find()。它会在每一个当前选中元素的子孙元素中寻找与指定选择器字符串匹配的元素,然后它返回一个新的 jQuery对象来代表所匹配的子孙元素集。注意这些新选中的元素不会并入已存在的选中元素集中。同时注意find()和filter()不 同,filter()不会选中新元素,只是简单地将当前选中的元素集进行缩减:

$("p").find("p")            //在中查找元素,与$("p p")相同

该类别中的其他方法返回新的jQuery对象,代表当前选中元素集中每一个元素的子元素、兄弟元素或父元素。大部分都接受可选的选择器字符串作为参数。不传入选择器时,它们会返回所有子元素、兄弟元素或父元素。传入选择器时,它们会过滤元素集,仅返回匹配的。

children()方法返回每一个选中元素的直接子元素,可以用可选的选择器参数进行过滤:

//寻找id为"header"和"footer"元素的子节点元素中的所有元素

//与$("#header>span, #footer>span")相同

$("#header, #footer").children("span")

contents()方法与children()方法类似,不同的是它会返回每一个元素的所有子节点,包括文本节点。如果选中元素集中 有

next()和prev()方法返回每一个选中元素的下一个和上一个兄弟元素(如果有的话)。如果传入了选择器,会只选中匹配该选择器的兄弟元素:

$("h1").next("p")      //与$("h1+p")相同

$("h1").prev()         //

元素前面的兄弟元素

nextAll()和prevAll()返回每一个选中元素前面或后面的所有兄弟元素(如果有的话)。siblings()方法则返回每一个选中元素的所有兄弟元素(选中元素本身不是自己的兄弟元素)。如果给这些方法传人选择器,则只会返回匹配的兄弟元素:

$("#footer").nextAll("p")       //紧跟#footer元素的所有

兄弟元素

$("#footer").prevAll()          //#footer元素前面的所有兄弟元素

从jQuery 1.4开始,nextUntil()和prevUntil()方法接受一个选择器参数,会选取选中元素后面或前面的所有兄弟元素,直到找到某个匹配该选择 器的兄弟元素为止。如果省略该选择器,这两个方法的作用就和不带选择器的nextAll()和prevAll()一样。

parent()方法返回每一个选中元素的父节点:

$("li").parent()        //列表元素的父节点,比如

    元素

parents()方法返回每一个选中元素的祖先节点(向上直到元素)。parent()和parents()都接受一个可选的选择器字符串参数:

$("a[href]").parents("p")            //含有链接的

元素

parentsUntil()返回每一个选中元素的祖先元素,直到出现匹配指定选择器的第一个祖先元素。closest()方法必须传人一个选择器 字符串,会返回每一个选中元素的祖先元素中匹配该选择器的最近一个祖先元素(如果有的话)。对该方法而言,元素被认为是自身的祖先元素。在jQuery 1.4中,还可以给closest()传入一个祖先元素作为第二个参数,用来阻止jQuery往上查找时超越该指定元素:

$("a[href]").closest("p")         //包含链接的最里层

$("a[href]").parentsUntil(":not(p)")      //所有包裹

元素

以上就是jquery选择器及原理的全部介绍,感谢大家的阅读!


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

6

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

60

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

148

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

273

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

113

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

159

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

30

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

81

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

62

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号