前言:
jQuery是我接触的第一个前端库,在学习的过程中,我借助了jQuery文档,《锋利的jQuery》和《jQuery基础教程》这三个学习材料,同时参考一本叫做《精通jQuery》的厚厚的大部头。
然而,jQuery知识点比较碎,所以我还是决定写一个系列博客,既是总结,也是加强自己的记忆。
jQuery选择器概述
jQuery选择器就是一个用来查找并且返回指定DOM元素的东西,它是跨浏览器兼容的。
它比css选择器厉害多了。
前方高能
虽然可能会又臭又长但是我觉得这些都有必要过一遍。
还是决定默写一下。。。。。。😂
jQuery选择器一锅端
基本选择器
1 | $("#id"); |
首先id选择器,类选择器和element选择器,通配符选择器,都是直接传入对应的css选择器就好。
最后这个“xx”系列,它的意思是,可以同时选择多个元素,比如$(“#id, .class, element”),它可以将你选择的所有元素组成一个数组,然后返回给你。
层次选择器
1 | $("ancestor descendant"); |
其实还是css选择器的知识点,中间是空格的时候表示选中所有的后代子元素,箭头表示选中所有的子代元素,加号表示选中它紧邻的后面的next元素, 波浪线表示选中它所有的后面的元素。
其中,ancestor,descendant,parent,child,prev,prev,sibilings本身通通都是基本选择器。
过滤选择器
基本过滤选择器
1 | $("xxx:first"); |
“xxx”本身也是选择器。啥也不写的时候表示全局。
first,last,分别选中第一个和最后一个元素。
not(seletor)选择器在已有的选择器中过滤掉匹配到selector的选择器。
even和odd选择器在选中的元素中筛选出索引为偶数和奇数的元素,返回数组。
eq(index)这个直接在当前数组中返回index所指向的元素。
gt,lt分别返回大于和小于里面传入的index的元素集合。
header选择器是专门用来选择标题的,也就是h1,h2, h3….这样的。
animated就是在当前元素集合中选出正在运动的元素集合。
focus,获取页面中当前获取焦点的元素。
内容过滤选择器
内容过滤过滤的是子元素和文本内容。
1 | $("xxx:contains(text)"); |
其中xxx本身也是选择器,啥也不写的时候表示全局。
contains用来选中拥有指定文本内容的元素。
empty选取不包含任何子元素和文本元素的空元素。
parent选取自己本身拥有子元素的元素。
可见性过滤选择器
1 | $("xxx:hidden"); |
分别选中当前页面所有不可见和可见的元素。
其中不可见,是说你设置了type=”hidden”或者display=”none”,它都是不可见的。
属性过滤选择器
1 | $("xxx[属性名]"); |
这一块有点正则表达式的意思了。
第一个用来选择拥有某个属性的元素。
xxx[属性名=值]用来选择属性名等于某个值的元素。
xxx[属性名!=值]用来选择属性名不等于某个值的元素。
xxx[属性名^=值]用来选择属性名以指定值开始的元素。
xxx[属性名$=值]用来选择属性名以指定值结束的元素。
xxx[属性名|=值]用来选择以指定值为前缀的元素。
这个可能不太好理解,举个例子:
1 | $("div[title|='en']") |
它选中的是形容”en”或者”en-xxxx”这样的元素。
xxx[属性名=值]用来选择属性名对应的值中含有指定值的元素。
xxx[属性名~=值]用来选择*属性名对应的值中用空格风格的值中包含给定值的元素。
xxx[属性选择器][属性选择器][….]是说并列多个属性选择器从而实现复合筛选的效果。
举个🌰:
1 | $("div[id][title$='test']"); |
用以选取既拥有id属性,title属性的值又以test结尾的元素。
子元素过滤选择器
1 | $("xxx:first-child"); |
上面三个都比较简单,就是选择元素自身是父元素的第一个,最后一个和唯一一个子元素的元素。
比如:
1 | $("ul li:first-child"); |
就是说我要选中所有ul下的第一个li元素。
还有一个情况多一些的:
1 | $("xxx:nth-child(index/even/odd/equation)"); |
这个分情况来看:
- nth-child(index),index是数字,表示把当前元素(即xxx选中的元素)看作是父元素下的指定索引的子元素选出来
- nth-child(even)和nth-child(odd)分别选择索引序号为偶数或者奇数的元素
- nth-child(equation)用来根据表达式对元素进行选择,比如这样:nth-child(3n+1)选择符合3n+1这个表达式的数字做索引的元素。
表单对象属性过滤选择器
1 | $("xxx:enabled"); |
这个主要是针对表单元素进行选择:
- enabled在指定范围的元素中选取可用的元素
- disabled在指定范围的元素中选取不可用的元素
- checked在指定范围中选取所有被选中的元素.主要针对单选框,复选框。(勾选方式)
- selected在指定范围的元素中选取所有被选中的元素。主要针对下拉列表。
表单选择器
1 | $(":input"); |
- input 选取的是一类元素,包括
<input>,<textarea>,<select>和<button>
元素 - text 选取的是单行的文本框 即
<input type="text">
- password 选取的是密码框 即
<input type="password">
- radio 选取的是单选框 即
<input type="radio">
- checkbox 选取所有的多选框
<input type="checkbox">
- submit 选取的是所有的提交按钮
<input type="submit">
- image 选取的是所有的图像按钮
<input type="image">
- reset 选取的是所有的重置按钮
<input type="reset">
- button 选取的是所有的按钮 必须是button标签 input不行
- file 选取所有的type属性为file的input元素
<input type="file">
结语
jQuery选择器其实是有一些繁琐的,而且许多细节必须去实践才能解除自己的困惑。
(终于写完了,长出一口气)。
另外要注意,有时候我们想要把获取到的jQuery对象转换成DOM对象,这时候应该这样做:
比如这个元素的id为dom:
1 | var $dom = $("#dom"); |
利用get(index)或者直接写成数组获取元素的形式即可。