位置: 编程技术 - 正文

Jquery 1.9.1源码分析系列(十二)之筛选操作(jquery animate源码)

编辑:rootadmin

推荐整理分享Jquery 1.9.1源码分析系列(十二)之筛选操作(jquery animate源码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery源码实现原理,jquery.min.js源代码,jquery源码实现原理,jquery.min.js源代码,jquery源码分析,jquery源码实现原理,jquery源码是什么水平,jquery源码分析,内容如对您有帮助,希望把文章链接给更多的朋友!

废话不多说了直接奔入主题了。

  find接受一个参数表达式selector:选择器(字符串)、DOM元素(Element)、jQuery对象。分两种情况处理:

  第一种,如果传入的参数是非字符串,则先通过jQuery选择器将selector查找出来,然后过滤出包含于当前jQuery对象所匹配的元素的节点。

可以看出过滤条件中jQuery.contains( self[ i ], this )是关键,该函数使用的是Sizzle选择器中的函数,在Sizzle引擎中有分析,详情点击。

第二种,如果选择器是字符串,调用jQuery.find (= Sizzle)直接处理

  第二个参数是可选的。函数用于从当前匹配元素开始,逐级向上级选取符合指定表达式的第一个元素,并以jQuery对象的形式返回。

  这里的表达式包括:选择器(字符串)、DOM元素(Element)、jQuery对象。

  代码中的处理步骤为

  1.根据传递的参数先查询出结果保存在pos中。

  2.遍历当前jQuery对象的每一个元素,从这个元素开始,逐级向上级选取符合指定表达式的第一个祖先元素。

  parents() 和 .closest() 方法类似,它们都沿 DOM 树向上遍历。但区别也很大closest找到第一个符合条件就截止,parents是找到所有符合条件的集合。

jQuery.fn. parent/ parents/ parentsUntil/ next/ prev/ nextAll/ prevAll/ nextUntil/ prevUntil/ siblings/ children/ contents详解

  以上几组筛选被放在一起处理,源码如下

  可以看出,这几个筛选步骤一致。都是先通过map函数把当前jQuery对象每个匹配的元素代入相应的匹配函数(fn)中获取出结果然后在进行后续的过滤。

  我们先看一下后面的过滤(已经通过jQuery.map( this, fn, until )获取到了备选种子ret)  首先,并不是所有的筛选函数都有until这个参数,只有以Until结尾的几个筛选才需要这个参数,其他的筛选只有selector这个参数。

  其次,如果有选择器,则通过选择器过滤一下先前查找结果ret

Jquery 1.9.1源码分析系列(十二)之筛选操作(jquery animate源码)

  然后,guaranteedUnique里面的几种筛选条件(children/contents/next/prev)在当前jQuery对象所匹配的元素个数有多个的时候,通过每个匹配元素获取到的结果保存在结果集ret中,且不需要去重。其他筛选是要去重的。点击查看jQuery.unique方法详解

  另外,还需要处理的特殊情况是: 如果当前jQuery对象所匹配的元素有多个,则使用parents /prevUntil /prevAll这三种筛选的结果需要倒序排列。需要倒序的原因:jQuery.unique使用的是Sizzle引擎中的排序函数Sizzle .uniqueSort,这个排序函数会根据文档最顶层对象到最底层的方式排列。

  最后,返回包裹后的结果

  上面说了主题的框架结构,下面说一下这一组筛选器匹配函数里面用到的两个函数jQuery.dir和jQuery. sibling,直接上源码//从当前元素elem指定的dir对应的节点开始一直查找dir,并将这些节点保存在matched中,直到循环终止。注意:结果中不包含elem节点

  add函数是向当前匹配元素中添加符合指定表达式的元素,并以jQuery对象的形式返回。add可以接收包括:选择器(字符串)、HTML内容(字符串)、DOM元素(Element)、jQuery对象。处理比较简单,直接上源码

  not和filter都是操作本身的集合,not是过滤掉本身集合中满足过滤条件selector的项,留下其他项。而filter是留下满足过滤条件selector的项。

  关键是function winnow( elements, qualifier, keep )函数。这个函数的功能是执行相同的过滤或者不过滤的功能。过滤条件qualifier有三种:函数、DOM节点、字符串。keep:true表示保留满足过滤条件的项,false表示保留不满足过滤条件的项。

winnow的源码注释如下

  其中用到jQuery.grep,grep详解点击这里。

  jQuery.filter( expr, elems, not )这个低级api专门用来处理jQuery.fn.filter中过滤条件为字符串的情况。

  index函数实际上是一个多功能函数的集合。

  第一个功能:不传递elem参数,则表示取当前jQuery对象(jQuery对象的第一个元素)在其所有同辈元素中的位置。

  第二个功能:如果参数为String类型则将其视作选择器,返回当前元素在选择器所匹配的元素中的索引位置。如果该选择器不匹配任何元素或者当前元素不在匹配到的元素内,则返回-1。

  第三个功能:如果object为DOM元素或jQuery对象,则返回该元素(或该jQuery对象中的第一个元素)在当前jQuery对象所匹配的元素中的索引位置。

  其他的筛选处理就不分析了。看源码即可明白。

jquery选择器

选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $(".intro") 所有 class="intro" 的元素 element $("p") 所有 <p> 元素 .class.class $(".intro.demo") 所有 class="intro" 且 class="demo" 的元素 :first $("p:first") 第一个 <p> 元素 :last $("p:last") 最后一个 <p> 元素 :even $("tr:even") 所有偶数 <tr> 元素 :odd $("tr:odd") 所有奇数 <tr> 元素 :eq(index) $("ul li:eq(3)") 列表中的第四个元素(index 从 0 开始) :gt(no) $("ul li:gt(3)") 列出 index 大于 3 的元素 :lt(no) $("ul li:lt(3)") 列出 index 小于 3 的元素 :not(selector) $("input:not(:empty)") 所有不为空的 input 元素 :header $(":header") 所有标题元素 <h1> - <h6> :animated 所有动画元素 :contains(text) $(":contains('W3School')") 包含指定字符串的所有元素 :empty $(":empty") 无子(元素)节点的所有元素 :hidden $("p:hidden") 所有隐藏的 <p> 元素 :visible $("table:visible") 所有可见的表格 s1,s2,s3 $("th,td,.intro") 所有带有匹配选择的元素 [attribute] $("[href]") 所有带有 href 属性的元素 [attribute=value] $("[href='#']") 所有 href 属性的值等于 "#" 的元素 [attribute!=value] $("[href!='#']") 所有 href 属性的值不等于 "#" 的元素 [attribute$=value] $("[href$='.jpg']") 所有 href 属性的值包含以 ".jpg" 结尾的元素 :input $(":input") 所有 <input> 元素 :text $(":text") 所有 type="text" 的 <input> 元素 :password $(":password") 所有 type="password" 的 <input> 元素 :radio $(":radio") 所有 type="radio" 的 <input> 元素 :checkbox $(":checkbox") 所有 type="checkbox" 的 <input> 元素 :submit $(":submit") 所有 type="submit" 的 <input> 元素 :reset $(":reset") 所有 type="reset" 的 <input> 元素 :button $(":button") 所有 type="button" 的 <input> 元素 :image $(":image") 所有 type="image" 的 <input> 元素 :file $(":file") 所有 type="file" 的 <input> 元素 :enabled $(":enabled") 所有激活的 input 元素 :disabled $(":disabled") 所有禁用的 input 元素 :selected $(":selected") 所有被选取的 input 元素 :checked $(":checked") 所有被选中的 input 元素

通过点击jqgrid表格弹出需要的表格数据 首先对Jqgrid网格插件做个简要的说明。在众多的表格插件中,Jqgrid的特点是非常鲜明的。特点如下:完整的表格呈现与运算功能,包含换页、栏位排序、g

jqGrid表格应用之新增与删除数据附源码下载 jqGrid可以结合fancybox等插件完成超酷的弹出层效果,通过与php后台交互,可以轻松完成数据的添加与详情查看,而这个过程完全是一个ajax异步通信过程

Jqgrid之强大的表格插件应用 jqGrid是一款基于jQuery的功能强大的表格插件,使用jqGrid可以轻松实现前端页面与后台数据进行ajax异步通信,jqGrid运行速度相当快,可以很好的应用在一

标签: jquery animate源码

本文链接地址:https://www.jiuchutong.com/biancheng/376176.html 转载请保留说明!

上一篇:日常收藏的jquery技巧(html收藏夹导入)

下一篇:通过点击jqgrid表格弹出需要的表格数据(jqgrid单元格点击事件)

  • 逆回购会不会亏本金
  • 遗失增值税专用发票如何处理办法
  • 境内单位和个人向境外单位提供服务
  • 劳务派遣差额发票0税率情况
  • 税法规定的增值税
  • 政府补助是属于什么财务活动
  • 微信支付算库存现金还是银行存款
  • 融资租赁确认的利息收入需要交增值税吗
  • 实收资本何时交税
  • 社保次月什么时候到账
  • 企业收到政府补助资金怎么做账
  • 银行的抵债资产是什么
  • 免租期租金能否确认递延所得税吗?
  • 外购低值易耗品可以抵扣进项税额吗
  • 税金及附加包括所得税费用吗
  • 个人开劳务专票给公司怎么开
  • 资产原值包含残值吗
  • 季报是根据什么制定的
  • 赔偿款和罚款是一样的吗
  • 发票过期未认证可以用吗
  • 报销单据粘贴单图片
  • 一般纳税人进项税会计分录
  • 增值税电子发票公共服务平台
  • 应纳税所得额怎么理解
  • 企业开办费的会计分录
  • 一般纳税人怎么算税
  • 设置bios 密码
  • 怎么光驱重装系统
  • php面试题目100及最佳答案
  • 实收资本可以大于注册资本吗
  • 哪些情形不属于伪现金
  • 业务招待费能不能计入销售费用
  • 库存现金要设置明细科目吗
  • 代境外汇款收的什么费用
  • 金融商品转让业务包括
  • 缴纳增值税的会计处理方法
  • 软件产品即征即退申请表
  • laravel创建model
  • dos命令怎么转到d盘
  • 融资租赁租入固定资产是什么意思
  • 公章盖的字不完整有效吗
  • 车辆转让后的责任谁承担
  • 用友t6模块
  • 体检费专票可以抵扣吗
  • 劳务公司开发票劳务公司如何转取收入?
  • 织梦如何添加浮动广告
  • dedecms仿站如何做
  • mysql中desc什么意思
  • 营业总收入包括营业外收入吗
  • 结转本月应交增值税
  • 取得税务师证书申请社保补贴
  • 分配人工费的会计分录
  • 工地扬尘检测仪图片
  • 表彰奖励奖金规定
  • 企业个人工资薪金换了电脑怎么能导得出来
  • 进项税额转出的分录怎么做
  • 业务招待费纳税调整会计分录
  • 用SELECT... INTO OUTFILE语句导出MySQL数据的教程
  • mysql binlog redo
  • win7系统更改ip地址
  • imessage如何群发
  • linux怎么恢复到初始状态
  • linux sort命令参数及用法详解
  • windows7的注册表在哪里
  • win7旗舰版提示不是正版
  • cocos2dx加libevent库
  • GLSL Tessellation Shader的编程入门介绍
  • 安装centos no such device
  • bat脚本判断
  • input和button按钮合到一起
  • javascript函数的定义
  • 批处理压缩
  • unity控制组件开关
  • 经常用到的图像格式有
  • Python连接MySQL并使用fetchall()方法过滤特殊字符
  • python读入txt
  • js对象索引获取key
  • android中使用sharedprefence的步骤
  • 企业年金个人缴纳的辞职能拿吗
  • 南川大观薰衣草花期
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设