常见用法

$(’.demo’): 按类搜索
$(’#demo’):按ID搜索

优势

  1. 防止 undefined 错误
//假设当前网页中没有ID为id的元素,$('#id')只是返回一个简单的jQuery实例,后面的链式操作静默失败,
//绝不会发生错误,相反如果你使用document.getElementById('id'),则会返回undefined,后面无法进行链式操作
$('#id').css('color', 'red')

基本选择器

选择器 描述 示例
#id 根据id匹配一个元素 $(’#id) 选择ID为id的单个元素
.class 根据给定的类名匹配元素 $(’.text’) 选择所有class为text的所有元素
element 根据给定的元素名匹配元素 $(‘p’) 选择所有的<p>元素
* 匹配所有元素 $(’*’) 选择所有的元素
selector1, selector2, …selectorN 将每一个选择器匹配到的元素合并后一起返回 $(‘div, span, p.myClass’) 选择所有<div>,<span>,以及class为myClass的p元素

层次选择器

选择器 描述 示例
$(‘ancestor descendant’) 选择ancestor元素里的所有descendant(后代)元素 $(‘div span’)选择<div>里的所有的<span>元素
$(‘parent > child’) 选择parent元素下的直接子元素child $(‘div>span’)选择<div>元素下的直接<span>子元素
$(‘prev+next’) 选择紧接在prev元素后的next元素 $(’.one+div’)选择class为one的后面的兄弟元素<div>
$(‘prev ~ siblings’) 选择prev元素之后的所有siblings元素 $(’#two~div’)选择id为two的元素后面的所有<div>同辈元素

选择器与 jQuery中的等价方法

在jQuery中的源代码文件src\traversing.js中,可以看到如下几个方法:

jQuery.each( {parent: function( elem ) {var parent = elem.parentNode;return parent && parent.nodeType !== 11 ? parent : null;},....

上面这些方法就是用来遍历元素的,通常与层次选择器有关联,我们先来分析一下这些常用的方法是怎么使用的。
先来一个demo文件吧。

<div class="one" id="one" >id为one,class为one的div<div class="mini">class为mini</div>
</div><div class="one"  id="two" title="test" >id为two,class为one,title为test的div.<div class="mini"  title="other">class为mini,title为other</div><div class="mini"  title="test">class为mini,title为test</div>
</div><div class="one"><div class="mini">class为mini</div><div class="mini">class为mini</div><div class="mini">class为mini</div><div class="mini"></div>
</div><div class="one"><div class="mini">class为mini</div><div class="mini">class为mini</div><div class="mini">class为mini</div><div class="mini"  title="tesst">class为mini,title为tesst</div>
</div>

parent()方法

// 找到class是mini的所有元素的父元素
$('.mini').parent();

一共有4个父元素,都是div元素:

我们看一下parent()是怎么执行的:

//在这里把对应的方法全部添加到了jQuery.fn中去,也就是变成jQuery实例方法了
}, function( name, fn ) {jQuery.fn[ name ] = function( until, selector ) {//until,selector参数都是undefined,在jQuery.map()中会调用fn()函数,也就是我们文件中的// parent方法var matched = jQuery.map( this, fn, until );

在core.js中可以看到jQuery.map方法的实现:

// arg is for internal usage onlymap: function( elems, callback, arg ) {var length, value,i = 0,ret = [];// Go through the array, translating each of the items to their new valuesif ( isArrayLike( elems ) ) {length = elems.length;for ( ; i < length; i++ ) {// 就是针对当前jQuery实例$('.mini')中的每个网页元素遍历调用callback方法,其实也就是// parent()方法,并且把结果存储起来value = callback( elems[ i ], i, arg );

看一下parent方法:

parent: function( elem ) {//很简单,直接调用元素的parentNode属性,如果类型不是DocumentFragment,就直接返回,否则返回nullvar parent = elem.parentNode;return parent && parent.nodeType !== 11 ? parent : null;
},

所以最后的操作结果就是4个div元素。

我们还可以加个过滤,比如只取parent中id为two的元素:

$('.mini').parent('#two');

结果只有一个:

这时候看一下parent()方法怎么执行的:

}, function( name, fn ) {//参数until为'#two', selector为undefinedjQuery.fn[ name ] = function( until, selector ) {var matched = jQuery.map( this, fn, until );// selector变成'#two'if ( name.slice( -5 ) !== "Until" ) {selector = until;}// 针对selector为"#two",对结果进行过滤,这样就把4个结果变成了1个结果if ( selector && typeof selector === "string" ) {matched = jQuery.filter( selector, matched );}

parents()方法

这个方法是查找某个元素的所有祖先元素:

$('.mini').parents();

看一下结果,多了2个元素,分别是body, html元素:

parents实现如下:

parents: function( elem ) {//递归调用parentNode属性return dir( elem, "parentNode" );
},
// src\traversing\var\dir.js
export default function( elem, dir, until ) {var matched = [],truncate = until !== undefined;//只要父结点不是Document类型,而且结点类型是元素,就加入进来while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {if ( elem.nodeType === 1 ) {if ( truncate && jQuery( elem ).is( until ) ) {break;}matched.push( elem );}}return matched;
}

你也可以传入参数,对结果进行再过滤。

上面两个方法只是抛砖引玉,这样你了解了上面方法的使用,其他方法的使用也就会了。
有些层次选择器可以找到对应的方法调用:

选择器 等价方法
$(’.one + div’) $(’.one’).next(‘div’)
$(’#prev~div’) $(’#prev’).nextAll(‘div’)

选择过滤器

基本过滤选择器

选择器 描述 返回 示例
:first 选取第1个元素 单个元素 $(‘div:first’)选取所有<div>元素中的第1个<div>元素
:last 选择最后1个元素 单个元素 $(‘div:last’)选取所有<div>元素中的最后1个<div>元素
:not(selector) 去除所有与给定选择器匹配的元素 集合元素 $(‘input:not(.myClass)’)选择class不是myClass的所有<input>元素
:even 选取索引是偶数的所有元素,索引从0开始 集合元素 $(‘input:even’)选取索引是偶数的<input>元素
:odd 选取索引是奇数的所有元素,索引从0开始 集合元素 $(‘input:odd’)选取索引是奇数的<input>元素
:eq(index) 选取索引等于index的元素(index从0开始) 单个元素 $(‘input:eq(1)’)选取索引等于1的<input>元素
:gt(index) 选取索引大于index的元素(index从0开始) 集合元素 $(‘input:gt(1)’)选取索引大于1的<input>元素(注:大于1,而不包括1)
:lt(index) 选取索引小于index的元素(index从0开始) 集合元素 $(input:lt(1)’)选取索引小于1的<input>元素(注:小于1,而不包括1)
:header 选取所有的标题元素,如h1, h2, h3等等 集合元素 $(’:header’)选择网页中所有的<h1>, <h2>,<h3>…
:animated 选取当前正在执行动画的元素 集合元素 $(‘div:animated’)选取正在执行动画的<div>元素
:focus 选取当前获取焦点的元素 集合元素 $(’:focus’)选取当前获取焦点的元素

内容过滤选择器

选择器 描述 返回 示例
:contains(text) 选取含有文本内容为"text"的元素 集合元素 $(‘div:contains(‘我’)’)选取含有文本"我"的<div>元素
:empty 选取不包含子元素或者文本的空元素 集合元素 $(‘div:empty’)选取不包含子元素(包括文本元素)的<div>空元素
:has(selector) 选取含有选择器匹配的元素的元素 集合元素 $(‘div:has§’)选取含有<p>元素的<div>元素
:parent 选取含有子元素或者文本的元素 集合元素 $(‘div:parent’)选取拥有子元素(包括文本元素)的<div>元素

可见性过滤选择器

选择器 描述 返回 示例
:hidden 选取所有不可见的元素 集合元素 $(’:hidden’)选择所有不可见的元素。包括<input type=“hidden”/>,<div style=“display:none;”>和<div style=“visibility:hidden”>等元素。如果只想选取<input>元素,可以使用$(‘input:hidden’)
:visible 选取所有可见的元素 集合元素 $(‘div:visible’)选取所有可见的<div>元素

属性过滤选择器

选择器 描述 返回 示例
[attribute] 选取拥有此属性的元素 集合元素 $(‘div[id]’)选取拥有属性id的<div>元素
[attribute=value] 选取属性的值为value的元素 集合元素 $(‘div[title=test]’)选取属性title为’test’的’<div>元素
[attribute!=value] 选取属性的值不等于value的元素 集合元素 $(‘div[title!=test]’)选取属性title不等于’test’的<div>元素(注意:没有属性title的<div>元素也会被选取)
[attribute^=value] 选取属性的值以value开头的元素 集合元素 $("div[title^=test]’)选取属性title以’test’开头的<div>元素
[attribute$=value] 选取属性的值以value结尾的元素 集合元素 $(‘div[title$=test]’)选取属性title以’test’结尾的<div>元素
[attribute*=value] 选取属性的值含有value的元素 集合元素 $(‘div[title*=test]’)选取属性title含有’test’的<div>元素
[attribute|=value] 选取属性等于给定字符串或以该字符串为前缀(该字符串后跟一个连字符"-")的元素 集合元素 $(‘div[title|=en]’)选取属性title等于en或以en为前缀(该字符串后跟一个连字符"-")的元素
[attribute~=value] 选取属性用空格分隔的值中包含一个给定值的元素 集合元素 $(‘div[title~=uk]’)选取属性title用空格分隔的值中包含字符uk的元素
[attribute][attribute2][attributeN] 用属性选择器合并成一个复合属性选择器,满足多个条件。每选择一次,缩小一次范围 集合元素 $(‘div[id][title$=test]’)选取拥有属性id,并且title属性值以’test’结尾的<div>元素

子元素过滤选择器

选择器 描述 返回 示例
:nth-child(index/even/odd/equation) 选取每个父元素下的第index个子元素或者奇偶元素(index从1算起) 集合元素 :eq(index)只匹配一个元素,而:nth-child将为每一个父元素匹配子元素,并且 :nth-child(index)的index是从1开始的,而:eq(index)是从0算起的
:first-child 选取每个父元素的第1个子元素 集合元素 :first只返回单个元素,而:first-child选择符将为每个父元素匹配第1个子元素。例如$(‘ul li:first-child’)选择第个<ul>中第一个<li>元素
:last-child 选取每个父元素的最后一个子元素 集合元素 同样,:last只返回单个元素,而:last-child选择符将为每个父元素匹配最后一个子元素。例如$(‘ul li:last-child’)选择每个<ul>中最后一个<li>元素
:only-child 如果某个元素是它父元素中惟一的子元素,那么将会被匹配。如果父元素中含有其他元素,则不会被匹配 集合元素 $(‘ul li:only-child’),在<ul>中选择是唯一子元素的<li>元素

表单对象属性过滤选择器

选择器 描述 返回 示例
:enabled 选取所有可用元素 集合元素 $(’#form1 :enabled’)选择id为‘form1‘ 表单内的所有可用元素
:disabled 选取所有不可用元素 集合元素 $(’#form2 :disabled’)选取id为’form2’的表单内的所有不可用元素
:checked 选取所有被选中的元素(单选框,复选框) 集合元素 $(‘input:checked’)选择所有被选中的<input>元素
:selected 选择所有被选中的选项元素(下拉列表) 集合元素 $(‘select option:selected’)选取所有被选中的选项元素

表单选择器

选择器 描述 返回 示例
:input 选取所有的<input>、<textarea>、<select>和<button>元素 集合元素 $(’:input’)选择所有的<input>、<textarea>、<select>和<button>元素
:text 选择所有的单行文本框 集合元素 $(’:text’)选取所有的单行文本框
:password 选取所有的密码框 集合元素 $(’:password’)选取所有的密码框
:radio 选取所有的单选框 集合元素 $(’:radio’)选取所有的单选框
:checkbox 选取所有的多选框 集合元素 $(’:checkbox’)选取所有的复选框
:submit 选取所有的提交按钮 集合元素 $(’:submit’)选取所有的提交按钮
:image 选取所有的图像按钮 集合元素 $(’:image’)选取所有的图像按钮
:reset 选取所有的重置按钮 集合元素 $(’:reset’)选取所有的重置按钮
:button 选取所有的按钮 集合元素 $(’:button’)选取所有的按钮
:file 选取所有的上传域 集合元素 $(’:file’)选取所有的上传域
:hidden 选取所有不可见元素 集合元素 $(’:hidden’)选取所有不可见元素

《锋利的jQuery》笔记 第2章 jQuery选择器相关推荐

  1. jQuery系列 第五章 jQuery框架动画特效

    第五章 jQuery框架动画特效 5.1 jQuery动画特效说明 jQuery框架中为我们封装了众多的动画和特效方法,只需要调用对应的动画方法传递合适的参数,就能够方便的实现一些炫酷的效果,而且jQ ...

  2. jQuery系列 第四章 jQuery框架的选择器

    第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...

  3. jQuery系列 第六章 jQuery框架事件处理

    第六章 jQuery框架事件处理 JavaScript以事件驱动来实现页面的交互,其核心是以消息为基础,以事件来驱动.虽然利用传统的JavaScript事件处理方式也能够完成页面交互,但jQuery框 ...

  4. jQuery系列 第三章 jQuery框架操作CSS

    第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScr ...

  5. 锋利的Jquery【读书笔记】 -- 第四章 jQuery中的事件和动画

    锋利的Jquery读书笔记 第三章 jQuery中的DOM操作 jQuery中的事件 事件绑定 bind方法 合成事件 hover方法 toggle方法 事件冒泡 事件对象 停止事件冒泡 阻止默认行为 ...

  6. 【jQuery笔记Part3】01-jQuery-each遍历

    each遍历 静态方法:jQuery.each(object, [callback]) 对象方法:$().each(callback) 遍历数组 javaScript 中的遍历数组 静态方法遍历数组 ...

  7. 锋利的jQuery第2版学习笔记8~11章

    第8章,用jQuery打造个性网站 网站结构 文件结构 images文件夹用于存放将要用到的图片 styles文件夹用于存放CSS样式表,个人更倾向于使用CSS文件夹 scripts文件夹用于存放jQ ...

  8. 《锋利的jQuery》笔记 第1章 认识jQuery

    jQuery是支持链式操作的,现在我们用jQuery来实现一个导航栏: ./css/default.css: /* reset */ body{margin:0;padding:0 0 12px 0; ...

  9. jQuery实战读书笔记(第一章至第四章)

    2019独角兽企业重金招聘Python工程师标准>>> 第一章 jQuery 基础 1. 包装器 jQuery对包装器(Wrapper)或包装集(wrapped set)进行操作,即 ...

  10. jQuery笔记(锋利的jQuery)

    知识: jQuery对象和DOM对象不是互通的 相互转换的方法: //jQuery转换DOM //法一:使用数组下标[index] var $cr=$("#cr"); //jQue ...

最新文章

  1. C++__conversion function,Non-explicit one argument constructor
  2. Racket 6.7最新版本:提供对Android App的支持及改进的REPL等等
  3. 实用的HTML5的上传图片方法
  4. 03-04 元素定位工具
  5. c# post 读取返回html_PHP GET与POST
  6. as 使用类模拟枚举类
  7. Visio安装与下载
  8. SQLServer 2008 r2 安装图解
  9. Java 猜单词游戏
  10. 资深HR告诉你到底怎么写一份好的简历(非常全面)
  11. 30岁 android,90后30岁倒计时
  12. Python无法打开.xlsx文件:xlrd.biffh.XLRDError: Excel xlsx file; not supported
  13. linux无线网卡速度慢,Linux如何解决英特尔无线网卡WiFi网速慢、WiFi蓝牙无法共存等问题...
  14. javaweb JAVA JSP水费管理系统JSP电费管理系统JSP缴费管理系统JSP水费缴费系统JSP水电费管理
  15. 微信域名防封跳转技术原理,微信域名防封的细节把控
  16. 河南南阳:筹备火热 卧龙岗文化园春节大庙会1月22日启幕
  17. 量化投资--技术篇(5) 投资法则
  18. IDEA新推出的优雅美观字体初体验(赏心悦目)——JetBrainsMono
  19. linux 性能测试 antutu,安兔兔“不诚实”?这三款跑分软件绝对值得一试!
  20. 诺基亚S40机型新手美化攻略

热门文章

  1. 【C++代码整洁之道】遗留系统之殇
  2. 计算机应用技术和cad,计算机图形技术与CAD
  3. unzip命令 – 解压缩zip文件
  4. SQK Server实现 LeetCode 175 组合两个表
  5. 同人游戏开发工具巡礼——AVG ADV 引擎篇
  6. 苹果/微软/特斯拉的产品美学——向丑而生?
  7. VBA操作WORD(二):替换字符(含空格、全角字符、换行符等)
  8. protues 选项卡说明
  9. 计算机课件大学,大学计算机基础应用课件
  10. Java开发自学教程!java从入门到精通txt下载