.end()函数在jQuery中做了什么?

时间:2009-11-17 00:27:01

标签: jquery

我已经阅读了这个网页http://api.jquery.com/end/,但我仍然对.end()实际上做的事情一无所知。它是什么以及如何使用它?

我也正在阅读一本jQuery书,但它轻轻地釉了一下.end()并没有提供任何关于它的用途的例子。有人可以澄清吗?

5 个答案:

答案 0 :(得分:59)

$("body").find("span").css("border", "2px red solid");

VS

$("body").find("span").end().css("border", "2px red solid");

在这个确切的页面上,在Firebug控制台中单独执行这些语句,并注意这些行为有多么不同。基本上,.end()告诉它在找到所有跨度后回到身体,并将边界应用于身体,而不是跨度。如果我们没有.end(),那么jQuery代码基本上表现正常,并将.css()应用于正文中的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').find('span').end() 

因为find是一个“破坏性”操作,它会在我们执行.find()之前恢复,基本上是un-do或ctrl-Z是改变我们的jquery集合的最后一件事。

答案 1 :(得分:51)

它基本上回到父集。例如:

$('.tree')
    .find('.branch')
        .find('.leaf')
        .addClass('tacks-onto-leaf')
        .end()
    .addClass('tacks-onto-branch')
    .end()
.addClass('tacks-onto-tree');

答案 2 :(得分:7)

它将链式JQuery语句的“范围”退回到上一级。

jQuery对象中的标签最初[$('P')]:P,P

找到[$('P')后找到jQuery对象中的标签。找到('SPAN')]:SPAN,SPAN,SPAN,SPAN,SPAN

结束后jQuery对象中的标签[$('P')。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

答案 3 :(得分:4)

它允许当前的“范围”结束并重新定义。例如,假设您有一些HTML:

<div id="people">
 <ul>
   <li>A</li>
   <li>B</li>
 </ul>
 <ul>
   <li>C</li>
   <li>D</li>
  </ul>
</div>

您可以先通过以下方式选择父级:

$('#people')

修改子元素ul元素,如

#('#people').find('ul').css('border', '1px solid #f00')

但是如果你想继续编辑父元素(#people)会发生什么?你可以启动一个新的查找器$('#people')或者只是将它链接到第一行,然后是.end()来通知jQuery你要“关闭”find()并将搜索范围放回到在找到之前(暗示$('#people'),就像这样)

#('#people').find('ul').css('border', '1px solid #f00').end().css('border', '1px dashed #00f')

这样一行:抓住#people的所有子UL,将其边框更改为红色,然后将父#people元素的边框更改为虚线和蓝色。

答案 4 :(得分:0)

以下函数可用于更改jQuery选择,通常是为了使您的选择更具体,或包含/排除:

add,andSelf,children,filter,find,map,next,nextAll,not,parent,parents,prev,prevAll,siblings,slice,clone,appendTo,prependTo,insertBefore,insertAfter或replaceAll

在对扩展选择进行一些操作之后,

.end()可用于将您的选择重置回原始元素集。