jQuery源码分析之$.index函数
来源:互联网 发布:网络有利还是有害 编辑:程序博客网 时间:2024/05/25 08:12
测试代码1:
<div id="n1"><div id="n2"><ul id="n4"><li id="n5">item1</li><li id="n6">item2</li><li id="n7">item3</li></ul><span id="nz"></span><span id="n8"></span></div> </div>JS部分
var first=$("span").first();//获取到第一个span元素id="nz"var $pre=first.prevAll();//获取该元素前面的所有的同级元素,为n4alert($pre.length);//结果返回1,因为前面只有一个同级元素。如果n4前面还有一个span元素,那么this.first().prevAll().length为0!
测试代码2:
var reg="#n4";//把字符串包装为jQuery对象了,这里打印结果为2。也就是相当于一个选择器对象//和$("#n4")的选择结果是一样的alert(jQuery("span").length);//打印truealert(jQuery(reg) instanceof jQuery);
index源码分析:
index: function( elem ) {// No argument, return index in parent//调用方式: $("li").index( )//如果没有传入参数,那么if ( !elem ) {//首先,获取满足选择器的第一个元素,然后获取第一个元素前面的所有的同级元素的个数return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;}// index in selector//如果指定参数为字符型,如调用:$("li").index( "#n4" )if ( typeof elem === "string" ) {return jQuery.inArray( this[0], jQuery( elem ) );}// Locate the position of the desired elementreturn jQuery.inArray(// If it receives a jQuery object, the first element is used//如果是jQuery对象作为参数,那么获取参数第一个对象在调用选择器中的位置!elem.jquery ? elem[0] : elem, this );}
总结:(为了方便,把调用者称为调用对象,参数称为参数对象)
(1)参数对象如果是jQuery对象或者DOM对象,那么获取该jQuery对象的第一个DOM元素或者传入的DOM元素,看他在调用对象中的位置
(2)参数对象如果是String对象,那么把参数对象封装为jQuery选择器对象,判断调用对象的第一个DOM元素在该参数选择器中的位置
(3)参数如果是空,那么获取满足调用者对象选择结果的最前面的一个元素(如$("span")表示最前面的span元素$("span")[0],然后看最前面的$("span")[0]元素的兄弟节点的个数)的前面所有的同级元素的个数this.first().prevAll().length
//如果调用index方法时候,没有传入参数,我们就是获取第一个调用对象的最前面的同级元素个数! var $spans=$('span'); var siblings=$spans.index(); //首先获取调用对象的$('span')最前面的那个元素;然后我们看看最前面的那个元素之前的同级元素有多少! //最前面的那个元素是nz,他前面的同级元素是ul元素 console.log(siblings);
0 0
- jQuery源码分析之$.index函数
- jQuery源码分析之jQuery.makeArray函数
- 源码分析之jQuery.merge函数
- jQuery源码分析之proxy函数
- jQuery源码分析之$.inArray()函数
- jQuery源码分析之$.map函数
- jQuery源码分析之contains函数
- jQuery源码分析之globalEval函数
- jQuery源码之init函数的分析
- CodeIgniter源码分析之index.php
- CodeIgniter源码分析之index.php
- jquery源码分析之扩展函数 extend, $.extend
- jQuery源码分析之$.grep()函数四问
- jQuery源码分析之appendTo,prependTo,insertBefore,insertAfter,replaceWith函数
- jQuery源码分析之ajaxConverter与ajaxHandleResponse函数
- jQuery源码分析-each函数
- jQuery源码分析-extend函数
- jQuery 源码剖析-6 setArray each index 函数说明
- 九度OJ 1533 最长上升子序列 (基于贪心和二分查找)
- android studio 代码修复提示快捷键
- 用链表实现队列
- java内省机制及PropertyUtils使用方法
- iOS中的动画总体预览
- jQuery源码分析之$.index函数
- 机器学习(三)线性回归和梯度下降法
- 面向对象的php之类解耦的好处
- web链接与tab切换对应的效果
- 关于LayoutInflater的一些总结
- Android——使用Volley+fastJson在新线程中读取网络接口获取天气信息
- beanutils.describe 方法漏洞
- 单点登录----->在域名相同的情况下实现单点登录(sso)
- Hibernate 调用原生态Sql语句和存储过程