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

Luk*_*101 37 jquery

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

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

med*_*iev 63

$("body").find("span").css("border", "2px red solid");
Run Code Online (Sandbox Code Playgroud)

VS

$("body").find("span").end().css("border", "2px red solid");
Run Code Online (Sandbox Code Playgroud)

在Firebug控制台中单独执行这些语句,并注意这些行为的不同之处.基本上,.end()告诉它在找到所有跨度后回到身体,并将边界应用于身体,而不是跨度.如果我们没有.end()那里,jQuery代码基本上表现正常并将其应用于body中.css()span元素.

BODY > SPAN > APPLY BORDER TO SPANS
Run Code Online (Sandbox Code Playgroud)

随着end()它成为

BODY > SPAN > GO BACK TO BODY > APPLY BORDER TO BODY
Run Code Online (Sandbox Code Playgroud)

find()是一个破坏性操作,意味着它会更改jquery对象数组中的元素.

$('body') 
Run Code Online (Sandbox Code Playgroud)

我们当前的元素是身体

$('body').find('span') 
Run Code Online (Sandbox Code Playgroud)

我们使用了一个破坏性的操作find(),它改变了我们的整个对象集合,在体内填充了跨度,体内不再在集合中

$('body').find('span').end() 
Run Code Online (Sandbox Code Playgroud)

因为find是一个"破坏性"操作,它回复到我们之前.find(),基本上是un- do 或ctrl-Z是改变我们的jquery集合的最后一件事.


小智 51

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

$('.tree')
    .find('.branch')
        .find('.leaf')
        .addClass('tacks-onto-leaf')
        .end()
    .addClass('tacks-onto-branch')
    .end()
.addClass('tacks-onto-tree');
Run Code Online (Sandbox Code Playgroud)

  • 哇!除了视觉能力之外,缩进还有助于思维的逻辑能力 (7认同)

Ske*_*lan 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
Run Code Online (Sandbox Code Playgroud)


Cod*_*lan 5

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

<div id="people">
 <ul>
   <li>A</li>
   <li>B</li>
 </ul>
 <ul>
   <li>C</li>
   <li>D</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

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

$('#people')
Run Code Online (Sandbox Code Playgroud)

并修改子 ul 元素,例如

#('#people').find('ul').css('border', '1px solid #f00')
Run Code Online (Sandbox Code Playgroud)

但是,如果您想继续编辑父元素 (#people),会发生什么?你可以开始一个新的 finder $('#people') 或者只是将它链接到第一行,在 .end() 之前通知 jQuery 你想要“关闭” find() 并将搜索范围返回到在查找之前(隐含 $('#people'),像这样)

#('#people').find('ul').css('border', '1px solid #f00').end().css('border', '1px dashed #00f')
Run Code Online (Sandbox Code Playgroud)

因此该行将:获取#people 的所有子 UL,将其边框更改为红色,然后将父 #people 元素的边框更改为虚线和蓝色。