.end()函数在jQuery中做了什么?
我已经阅读了这个网页http://api.jquery.com/end/,但是我对于.end()实际上还是一无所知。 这是什么,你如何使用它?
我也在阅读一本jQuery书籍,但它轻轻釉过.end(),并没有给出它的用途的任何例子。 有人可以澄清?
$("body").find("span").css("border", "2px red solid");
VS
$("body").find("span").end().css("border", "2px red solid");
在Firebug控制台中单独执行这些语句,并注意行为有多不同。 基本上, .end()
告诉它在find所有跨度后返回到body,并将边界应用于body,而不是跨度。 如果我们在那里没有.end()
,那么jQuery代码基本上行为正常,并且将.css()
到body中的span
元素。
BODY > SPAN > APPLY BORDER TO SPANS
与end()
它成为
BODY > SPAN > GO BACK TO BODY > APPLY BORDER TO BODY
find()
是一个破坏性的操作,这意味着它改变了jQuery对象数组中的元素。
$('body')
我们目前的元素是身体
$('body').find('span')
我们使用了一个破坏性的操作find()
,这个操作改变了我们的整个对象集合被填充到body中的跨度,body不再处于集合中
$('body').find('span').end()
因为find是一个“破坏性”的操作,它在我们做了.find()
之前就恢复了,基本上不做或者ctrl-Z是改变我们的jquery集合的最后一件事情。
它基本上回到父母的集合。 例如:
$('.tree') .find('.branch') .find('.leaf') .addClass('tacks-onto-leaf') .end() .addClass('tacks-onto-branch') .end() .addClass('tacks-onto-tree');
它将链式JQuery语句的“范围”返回到上一级。
jQuery对象中的标签最初[$('P')]:P,P
find('SPAN')]:跨度,跨度,跨度,跨度,跨度
find('SPAN')。end()]:P,P
$('span') //all <span> tags in the doc .find('#foo') //all <span> with id foo .addClass('blinkyRed') //adds class blinkyRed <span id='foo'> .end() //reverts scope to all <span> tags .addClass('Bold') //adds class Bold to all <span> tags
它允许当前的“范围”结束并被重新定义。 例如,可以说你有一些HTML如:
<div id="people"> <ul> <li>A</li> <li>B</li> </ul> <ul> <li>C</li> <li>D</li> </ul> </div>
你可以先select父母:
$('#people')
并像修改孩子ul元素一样
#('#people').find('ul').css('border', '1px solid #f00')
但是如果你想继续编辑父元素(#people)呢? 你可以启动一个新的finder $('#people'),或者只是把它链接到第一行,然后用.end()来通知jQuery你要“closures”find()并且将search范围缩回到前面找(隐含的$('#人'),像这样)
#('#people').find('ul').css('border', '1px solid #f00').end().css('border', '1px dashed #00f')
因此,该行将:抓住#people的所有孩子的UL,将其边框改为红色,然后将父#people元素的边框更改为虚线和蓝色。
下面的函数可以用来改变你的jQueryselect,通常是为了使你的select更具体,或包容/独占:
添加和自我,孩子,filter,查找,映射,下一个,下一个,所有父母,父母,prev,prevAll,兄弟姐妹,切片,克隆,appendTo,prependTo,insertBefore,insertAfter或replaceAll
.end()
可以用来重置你的select回到你原来的一套元素,完成了一些操作扩展select。