第三章:JavaScript选择元素
我们使用jQuery时,很常用的套路是“两步”
第一步:选取元素
第二步:对选中的元素执行需要的操作
这一章我们重点研究第一步,如何使用jQuery选取元素以及对选取的结果进行“各种筛选”以满足我们的需求。
一、jQuery中的选择器
1、选择器
什么是选择器?怎么用
选择器就是我们在使用CSS的时候那些用于“选择”元素用的写在{}之前的部分!
在jQuery中要选择元素,你只需要把选择器以字符串形式传递给$函数即可,返回的结果是一个jQuery对象!
jQuery支持的选择器相当强大,我们在CSS里面使用的选择器,在jQuery里面都可以使用,为了满足更复杂的需求jQuery还扩充了
一些选择器,下面我们来系统的学习一下jQuery中的选择器!
1)核心选择器(应用最广泛的选择器)
* 选择所有元素
元素 选择特定类型的元素
.类名 选择具有特定class的元素
元素.类名 选择具有特定class的某类元素
#id名 选择具有特定id属性值的元素
2)属性选择器(根据元素的属性来选择元素)
[attr] 选取定义了attr属性的元素,即使这个属性没有值
[attr="val"] 选取attr属性值等于字符串val的元素
[attr^="val"] 选取attr属性值以字符串val开头的元素
[attr$="val"] 选取attr属性值以字符串val结尾的元素
[attr*="val"] 选取attr属性值包含字符串val的元素
[attr~="val"] 选取attr属性其中一个值是字符串val的元素
[attr|="val"] 选取attr属性值等于字符串val,或属性值为连字符分隔的值列表且第一个值是字符串val的元素
[selector1][selector2][selectorN] 复合属性选择器,需要同时满足多个条件时使用
属性选择器可以配合其他选择器使用!
3)关系选择器
<selector1> <selector2> 在给定的祖先元素下匹配所有的后代元素
<selector1> > <selector2> 在给定的父元素下匹配所有的子元素
<selector1> + <selector2> 匹配所有紧接在 <selector1> 元素后的 <selector2>
<selector1> ~ <selector2> 匹配 所有在<selector1> 元素之后的所有同辈 <selector2> 元素
4)伪元素和伪类选择器
:checked 用于表单,匹配所有被选中元素(复选框、单选框等,不包括select中的option)
:disabled 用于表单,匹配所有不可用元素
:enabled 用于表单,匹配所有可用元素
:focus 主要用于表单,选取得到焦点的元素
:required 用于表单,选取具有required属性的元素
:optional 用于表单,选取缺少required属性的元素
:empty 匹配所有既不包含子元素也不包含文本的空元素
:first-child 选取第一个子元素
:last-child 选取最后一个子元素
:nth-child(n) 选取元素的第n个子元素(从1开始计数)
n可为even或odd
:nth-last-child(n) 选取元素的倒数第n个子元素
:nth-of-type(n) 选择同属于一个父元素之下,并且标签名相同的元素中的第n个(注:从1开始计数)
:nth-last-of-type(n) 选择同属于一个父元素之下,并且标签名相同的元素中的倒数第n个
:only-child 如果某个元素是父元素中唯一的子元素,那将会被匹配
:only-of-type 选择所有没有兄弟元素,且具有相同的元素名称的元素
:root 选取文档的根元素,在html文档中即是<html>元素
等等....
5)联合选择器和反选择器
通过对选择器的合理安排,我们几乎能达成任何目标。我们还可以利用选择器组合实现联合选择和反选择
<selector>,<selector>,<selector>.. 选取匹配第一个选择器的元素和匹配第二个选择器的元素
:not(selector) 选取不匹配指定选择器的元素
6)jQuery扩充的选择器
上面是css中本身就提供的选择器,为了满足更复杂的需求,jQuery还额外的支持一些选择器,这些选择器不但给我们带来方便,还能
实现更细的控制。
:animated 匹配所有正在执行动画效果的元素
:contains(text) 如果元素内或者后代元素内包含指定的文本即被选中
:eq(n) 选择第n个元素(从0开始计数)
:first 选择第一个匹配的元素
:last 选择最后一个匹配的元素
:lt(n) 选择序号小于n的所有元素(从0开始计数)
:gt(n) 选择序号大于n的所有元素(从0开始计数)
:odd 选择所有奇数元素(从0开始计数)
:even 选择所有的偶数元素(从0开始计数)
:has(选择器) 匹配包含 选择器所匹配的元素的元素
:text 用于表单,匹配所有的单行文本框
:button 匹配所有按钮(input标签type为button以及<button>标签)
:checkbox 用于表单,选择所有的复选框(匹配所有复选框)
:file 用于表单,选择所有的文件上传输入框
:input 用于表单,选择所有的input元素(匹配所有 input, textarea, select 和 button 元素)
:password 用于表单,选择所有的密码输入框
:radio 用于表单,选择所有的单选框
:submit 用于表单,选择所有的表单提交按钮
:image 用于表单,匹配所有图像域
:reset 用于表单,选择所有的表单重置按钮
:selected 用于表单,匹配所有选中的option元素
:header 匹配如 h1, h2, h3之类的标题元素
:hidden 选择所有的被隐藏文件
:visible 选择所有的可见元素
:parent 匹配含有子元素或者文本的元素
选择器可以单独使用,也可以配合其他选择器使用!
7)限制搜索的范围
默认情况下jQuery是在整个页面中搜索元素,多给$函数提供一个参数,我们便能够限制搜索的范围。
$(选择器,$(选择器))
2、理解选择结果
使用$函数选择元素返回的是一个对象,我们可以称这个对象为jQuery对象(就是一种叫法),我们在jQuery执行一些操作的时候很多情况
下都是返回的jQuery对象,下面我们来看一下jQuery对象里面的一些成员(还有很多成员我们后面慢慢讲,这边只列出部分)。
1)each(function)
在每个元素上运行给定的function
遍历jQuery对象中的所有元素,传个一个函数
jQuery对象中有多少个元素,传入的函数就会自动的调用多少次!
调用这个函数时,会传入当前这个元素在 jQuery对象中的序号!我们使用一个参数即可获取!
在函数内部this代表当前的html元素对象!
返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。
返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')
2)get(index)
返回给定索引值(index)对应的HTMLElement对象
3)length
返回jQuery对象中包含元素的个数
4)selector 返回选择器
5)size()
返回jQuery对象中包含元素的个数
6)toArray() 返回一个jQuery对象中包含的元素构成的HTMLElement对象数组
jQuery对象内包含大量有用的方法以及属性,我们这边暂时只介绍这几个
目的就是让大家感受一下即可!
问题思考:
1)jQuery对象怎么得到普通HTMLElement对象
get(index)、toArray()
2)怎么由DOM对象生成jQuery对象
$(DOM对象)
3)迭代处理jQuery对象内含的DOM对象
each(function)
3、方便之处-修改多个元素
几乎jQuery对象的内部的所有方法都是直接修改内部含的全部元素
$("div").css('background','pink');
4、方便之处-链式方法调用
jQuery对象另一个优雅之处在于它灵活的API比如:
调用一个方法修改jQuery内元素的内容,这个方法的返回结果依然是一个jQuery对象。
二、向jQuery对象中添加更多元素
1、add方法
*注意点:add方法不会改变原来的jQuery对象,而是返回新的jQuery对象
向jQuery对象中添加更多的元素主要就是使用jQuery对象中的add方法!
add(选择器)、add(选择器,上下文) 把匹配选择器的所有元素添加到调用add方法的jQuery对象中
add(HTMLElement)、add(HTMLElement[]) 把一个或一组HTMLElement添加到jQuery对象
add(jQuery对象) 把参数jQuery对象中的元素添加到当前jQuery对象
三、对结果集进行筛选
*注意点:这些操作不会改变原来的jQuery对象,而是返回新的jQuery对象
1、从结果集中获取某个元素
1)first()方法
得到第一个元素
2)last()方法
得到最后一个元素
3)eq(index)方法
得到第index个元素
当index为正值时,从第一个元素开始计数,为负数时则从jQuery中的最后一个元素开始计数
2、获取元素子集
slice()方法用来获取特定一组子元素
slice(从第几个开始,结束的位置)如果不提供第二个参数则从第一个参数一直获取到元素集合的末尾
3、过滤元素
1)使用filter方法可以将所有 不满足 某个指定条件的元素剔除
filter(selector) 得到匹配选择器的元素
filter(HTMLElement) 得到参数对应的元素
filter(jQuery) 得到原始集合与参数jQuery对象所含元素集合的交集
filter(function(index))
每一个元素调用一次参数函数,若某个元素调用参数函数的返回值为false,就剔除该元素
它接受一个参数index,这是元素在jQuery集合的索引。在函数内, this指的是当前的DOM元素。
原来的jQuery对象里面含有多少个元素,传入的函数就会被执行多少次!
如果函数返回的是true,那么对于的元素就留下来
如果函数返回的false,或者不返回 那么对于的元素就剔除!
this
2)not方法与filter方法正好相反
not(选择器) 删除匹配选择器的元素
not(HTMLElement[])、not(HTMLElement) 删除指定的元素或者元素集合
not(jQuery) 删除原始集合与参数jQuery对象所含元素集合的交集
not(function(index)) 每个元素调用一次参数函数
4、基于后代元素过滤结果集
我们可以使用has方法指定一个选择器、一个或多个HTMLElement对象为参数,从而得到拥有指定后代的元素
保留包含特定后代的元素,去掉那些不含有指定后代的元素
has方法
如果jQuery对象中的元素里面含有匹配的后代元素,那么对应的元素就留下来!
一个选择器、
一个或多个HTMLElement对象为参数
四、检测结果集
1、使用is()方法
如果元素内部有符合传入选择器的元素那么返回的就是true否则返回的就是false
使用is方法确定jQuery对象中的某个或某些元素是否满足测试条件
is(选择器) 如果结果含有匹配选择器的元素则返回true
is(HTMLElement[])、is(HTMLElement) 如果结果集中包含指定的HTMLElement或者至少含有指定HTMLElement[]中的一个元素,返回true
is(jQuery) 如果结果集中至少包含一个参数对象中的元素,返回true
is(function(index))
如果有一任意次参数函数返回true,则返回true
函数用来作为测试元素的集合。它接受一个参数index,这是元素在jQuery集合的索引。
在函数内, this指的是当前的DOM元素。
五、根据现有结果集得到另一个结果集
1、获取后代元素
1)children()
不传参数:得到结果集内所有元素的子元素
传入选择器:得到结果集内 元素的匹配传入选择器的子元素
2)find()
传入选择器:得到匹配选择器的后代元素
传入jQuery、HTMLElement、HTMLElement[]
得到结果集内所有元素的后代元素与参数对象对应元素的交集
2、获取祖先元素
1)offsetParent()
返回祖先元素中第一个其position设为relative或者absolute的元素。
此方法仅对可见元素有效
2)parent()
取得结果集内元素的父元素
可以通过一个可选的选择器进行筛选
3)parents()
取得结果集内元素的祖先元素,可以通过一个可选的选择器进行筛选。
4)parentsUntil()
查找当前元素的所有的祖先元素,直到(但不包括)遇到匹配的那个元素才停止
第一个传入参数:html元素对象,jQuery对象,选择器
第二个传入参数(可选):选择器(对结果进行筛选)
3、获取兄弟元素
1)next()
取得一个包含匹配的元素集合中每一个元素紧邻的下一个同辈元素的元素集合
可以传入选择器进行筛选
2)nextAll()
查找当前元素之后所有的同辈元素
可以传入选择器进行筛选
3)nextUntil()
查找当前元素之后所有的同辈元素,直到(但不包括)遇到匹配的那个元素才停止。
第一个传入参数:DOMElement,jQuery对象,选择器
第二个传入参数(可选):选择器(对结果进行筛选)
4)prev()
取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合
可以传入选择器进行筛选
5)prevAll()
查找当前元素之前所有的同辈元素
可以传入选择器进行筛选
6)prevUntil()
查找当前元素之前所有的同辈元素,直到(但不包括)遇到匹配的那个元素才停止
第一个传入参数:DOMElement,jQuery对象,选择器
第二个传入参数(可选):选择器(对结果进行筛选)
7)siblings()
取得一个包含匹配的元素集合中每一个元素的所有同辈元素的元素集合
可以传入选择器进行筛选
六、修改、回退结果集
1、end()方法
使用end方法得到上一个结果集
2、addBack()方法
使用addBack()可以得到原结果集与当前结果的合集,也可传入选择器来过滤原结果集
第三章:JavaScript选择元素的更多相关文章
- D3.js的v5版本入门教程(第三章)—— 选择元素和绑定数据
D3.js的v5版本入门教程(第三章) 在D3.js中,选择元素和绑定元素是最基本的内容,也是很重要的内容,等你看完整个教程后你会发现,这些D3.js教程都是在选择元素和绑定元素的基础上展开后续工作的 ...
- 第三章 JavaScript操作BOM对象
第三章 JavaScript操作BOM对象 一.window对象 浏览器对象模型(BOM)是javascript的组成之一,它提供了独立与浏览器窗口进行交换的对象,使用浏览器对象模型可以实现与HT ...
- jQuery 实战读书笔记之第二章:选择元素
基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...
- JQuery制作网页—— 第三章 JavaScript操作DOM对象
1. DOM:Document Object Model(文档对象模型): DOM操作: ●DOM是Document Object Model的缩 ...
- 第三章JavaScript 内置对象
1 Number 1.1 属性 MAX_VALUE JS可以表示的最大的数字 MIN_VALUE JS可以表示的最小的数字 1.2 方法 toFixed(length) 指定保留长度的小数 toExp ...
- 第三章 JavaScript操作Dom对象
常用的方法: 1.访问节点: 通过Document.getElementByXXX()获得一个指定节点-->再通过以下属性节点访问节点:第一部分:节点属性a:parentNode 返回节点的父节 ...
- [Python笔记][第三章Python选择与循环]
1月28日学习 Python选择与循环 选择结构 多分枝选择结构 if 表达式 1: 语句块 1 elif 表达式 2: 语句块 2 elif 表达式 3: 语句块 3 ... else : 语句块 ...
- Python自学:第三章 修改列表元素
motorcycles = ['honda', 'yamaha', 'suzuki'] print(motorcycles) motorcycles[0] = 'ducati' print(motor ...
- Python自学:第三章 访问列表元素
#输出并首字母大写 bicycles = ['trek','cannondale','redline','specialized'] print(bicycles[0].title()) 输出为: T ...
随机推荐
- Devops(三):Docker常用命令
列出镜像列表(docker images) [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello ...
- class文件格式版本号
major version 52:jdk 8, major version 51:jdk 7, major version 50:jdk 6, major version 49:jdk 5, majo ...
- Xamarin图表开发基础教程(9)OxyPlot框架
Xamarin图表开发基础教程(9)OxyPlot框架 OxyPlot组件构成 OxyPlot组件主要由两个类构成,分别为PlotView和PlotModel.这两个类我们在上文中也使用到了.本节将讲 ...
- Mysql 插入自增的最大版本号
有一个需求,在历史表中,一条数据,在最大版本号上进行自增 INSERT Biz_CourseStudyHistory ( contentStudyID, courseWareID, versionNO ...
- Python - Django - 使用 Bootstrap 样式修改注册页
reg2 函数: from django.shortcuts import render, HttpResponse from app01 import models def reg2(request ...
- [LeetCode] 112. Path Sum 路径和
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群
原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897 版权声明:本文为博主原创文章,遵循CC 4.0 b ...
- k8s-RC副本机制
一.libeness probe的三种检测机制 HTTP GET:对容器的IP(指定的端口和路径)执行HTTP GET请求,收到响应并返回状态码不代表错误(2xx/3xx),成功 TCP socket ...
- 用ArcMap在PostgreSQL中创建要素类需要执行”create enterprise geodatabase”吗
问:用Acmap在PostgreSQL中创建要素类需要执行"create enterprise geodatabase"吗? 关于这个问题,是在为新员工做postgresql培训后 ...
- SecureCRT 使用密钥登录 Ubuntu
记录 SecureCRT 通过 SSH 使用密钥登录 Ubuntu. 具体步骤如下: 1. 使用 SecureCRT 生成密钥对: 工具 -> 创建公钥 -> 密钥类型 RSA -> ...