`

JQuery.closest(),parent(),parents()寻找父结点

 
阅读更多

HTML代码,测试地址:jQuery 遍历 - closest() 方法 

QQ截图20120217171206

------我粘代码上来,在页面上会自动隐藏(会显示一下)!谁能教我这是肿么回事! 
1.通过item-1查找 level-3(查找直接上级) 

复制代码代码如下:

$('li.item-1').closest('ul') 
$('li.item-1').parent() 
$('li.item-1').parents().eq(0) 


2.通过item-1查找 level-2(通过选择器查找父元素) 

复制代码代码如下:

$('li.item-1').closest('.level-2') 
//$('li.item-1').parent('.level-2') //找不到,parent()方法只遍历到上一层! 
$('li.item-1').parent().parent() //这个太二了有木有! 
$('li.item-1').parents('.level-2') 


parent(selector)中selector的用法 

复制代码代码如下:

$('li').parent() //返回level-3,level-2和level-1的集合,它们都是li的父元素 
$('li').parent('.level-3') //在上述集合中筛选出 level-3 


3.closest方法从当前元素开始遍历,而parent()从父元素开始! 
$('li.item-1').closest('li') //返回 item-1,使用时要注意,如果是一个div嵌套在中一个div中,要考虑选择器的正确使用! 
4.closet(selector,context)中context参数的用法 从当前元素开始遍历到context元素结束,若不存在context参数遍历到根结点 
由此可见使用context参数可以提高查询效率! 

复制代码代码如下:

var listItemII = document.getElementById('ii'); //Item-II 
//var listItemII=$(‘#ii'),这个不行,困惑好很久! 
$('li.item-1').closest('ul', listItemII).css('background-color', 'red'); 
//结果必须是 item-1的父级ul元素,itemII的子元素, 
$('li.item-1').closest('#one', listItemII).css('background-color', 'green'); 
//item-1的id=one的元素,且必须是itemII的子元素,未找到 


5.context参数的分析 

复制代码代码如下:

closest: function( selectors, context ) { 
var ret = [], i, l, cur = this[0]; 
// String 
var pos = POS.test( selectors ) || typeof selectors !== "string" ? 
jQuery( selectors, context || this.context ) : 
0; 
for ( i = 0, l = this.length; i < l; i++ ) { 
cur = this[i]; 
while ( cur ) { 
if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { 
//找到匹配元素,则将其添加返回值集合中!跳到下一元素的查找 
ret.push( cur ); 
break; 
} else { 
cur = cur.parentNode; 
//向上遍历DOM树,匹配选择器 
//在上述过程中如果父结点不存在,到达根结点不存在或者找到context结点(已到达指定位置)! 
if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { 
break; 




ret = ret.length > 1 ? jQuery.unique( ret ) : ret; 
return this.pushStack( ret, "closest", selectors ); 


对JQuery源码不是很了解,其中的一些细节就不解释了! 
通过closest()的定义可以得知,与context进行对比的变量cur=this[i]是一个DOM对象,而$('#ii')方法得到的是一个JQuery对象,因此传给closest(selector,context)方法的context参数必须通过DOM方法获得! 
jQuery对象和DOM对象的转换? 
1.获取对象(变量名前加$目的为约定区别JQuery和DOM变量): 
获取jQuery对象:var $variable=jQuery对象; 
获取DOM对象:var variable=DOM对象; 
2.jQuery对象转DOM对象: 
利用数组转换 var cr=$("#cr")[0]; 
利用get(index)方法转换 var cr=$("#cr").get(0); 
3.DOM对象转jQuery对象: 

复制代码代码如下:

var cr=document.getElementsById("cr"); //获取DOM对象 
var $cr=$(cr);//转换为jQuery对象 


SO…. 
$('li.item-1').closest('#one', $(‘#ii').get(0))//如此使用 
或者将源码中 "cur===context”的判断改为 "$(cur)===$(current)",这样就可以兼容两种用法! 
当然,修改源码并不是一个好建议,但是为什么JQuery本身没有使用这种方式呢……求指教 !!

分享到:
评论

相关推荐

    jQuery中closest和parents的区别分析

    jQuery中closest和parents从表现上来看都是说查找上线元素的一些内容了,但如果说仔细可能各位不懂,下面我们一起来看看closest和parents区别。 1.父级 parent()——唯一父级元素,可能是0个或1个元素。 2.祖先 ...

    jQuery 1.4.1 中文参考

    5.2.2 closest(expr, [context]) 79 5.2.3 find(expr) 81 5.2.4 next([expr]) 81 5.2.5 nextAll([expr]) 82 5.2.6 nextUntil([expr]) 82 5.2.7 offsetParent() 83 5.2.8 parent([expr]) 84 5.2.9 parents([expr]) 84...

    jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析

    如果给定表示 DOM 元素集合的 jQuery 对象,.closest() 方法允许我们检索 DOM 树中的这些元素以及它们的祖先元素,并用匹配元素构造新的 jQuery 对象。.parents() 和 .closest() 方法类似,它们都沿 DOM 树向上遍历...

    jQuery 1.5 API 中文版

    $.jQuery( selector [, context] ), .jQuery( element ), .jQuery( elementArray ), .jQuery( jQueryObject ), .jQuery( ) $.jQuery( html [, ownerDocument] ), .jQuery( html, props ) $.jQuery( fn ) jQuery ...

    jQuery手机端触屏滑动刻度尺选择数值代码

    $(this).closest(".row").find('.number').text(Math.ceil(number+Math.abs(vv/g)-10)); if($(this).closest('.ruler').hasClass("ruler-age")){ var ageVal = $(this).closest(".row").find('.number').text();...

    jQuery中closest()函数用法实例

    主要介绍了jQuery中closest()函数用法,实例分析了closest()函数的功能、定义及匹配元素的各种技巧,需要的朋友可以参考下

    jquery1.3 中文API

    .closest( selector ) - 找到离这个元素最近的一个父元素。 * jQuery.fx.off 关闭所有动画 * 新增jQuery.isArray * toggleClass(class[,switch]) 增加switch是否值,如果switch为真则加上该class否则为替换为...

    jQuery获取所有父级元素及同级元素及子元素的方法(推荐)

    $("#id").parent() 获取其父级元素 $("#id").parents() 获取其所有的祖先元素 $("#id").closest() 获取其最近的祖先元素,依次上溯 ——————————————————————————– 2.获取同级元素 $("#id...

    jquery通过closest选择器修改上级元素的方法

    主要介绍了jquery通过closest选择器修改上级元素的方法,实例分析了jQuery中closest选择器的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    JQuery新版中文手册

    JQuery开发手册 jQuery 核心函数 jQuery([sel,[context]]) jQuery(html,[ownerDoc]) jQuery(callback) jQuery.holdReady(hold)1.6+ jQuery 对象访问 each(callback) size() length selector context get...

    jquery中的查找parents与closest方法之间的区别

    主要是对jquery中的查找parents与closest方法之间的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    jQuery 1.3 API 参考文档中文版 html

    parent(expr) 例子中删除个body append(content) C要 css(name) 删除多余的 unbind([type],[data]) 代码注释翻译 change(fn) 未翻译的翻译一下 click(fn) 常用的事件-&gt;几个事件的顺序 dblclick(fn) 未...

    jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别

    在这个sprint中,因为要写前端UI,所以用到了jQuery,但是jQuery在向上遍历DOM树的API中,有parents()、 parent()、closest()这几个,一直不太清楚它们具体的区别,所以狠下心好好读了一下jQuery的API文档,并把区别...

    jQuery1.3API参考文档中文版

    parent(expr) 例子中删除个body append(content) C要 css(name) 删除多余的 unbind([type],[data]) 代码注释翻译 change(fn) 未翻译的翻译一下 click(fn) 常用的事件-&gt;几个事件的顺序 dblclick(fn) 未...

    jQuery详细教程

    jQuery详细教程,讲解很透彻, 一. jQuery 语法实例 $(this).hide() 演示 jQuery hide() 函数,隐藏当前的 HTML 元素。 $("#test").hide() 演示 jQuery hide() 函数,隐藏 id="test" 的元素。 $("p").hide() ...

Global site tag (gtag.js) - Google Analytics