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

.end()函数在jQuery中做什么?,jquery,Jquery,我已经读过这个网页,但我仍然不知道.end()实际上做了什么。它是干什么用的,你是怎么用的 我也在读一本jQuery的书,但它对.end()稍加修饰,没有给出它的用途的任何示例。有人能澄清一下吗 $("body").find("span").css("border", "2px red solid"); vs 在Firebug控制台中的这个页面上分别执行这些语句,并注意这些行为有多么不同。基本上,.end()告诉它在找到所有跨距后返回到主体,并将边框应用到主体,而不是跨距。如果我们没有.end

我已经读过这个网页,但我仍然不知道.end()实际上做了什么。它是干什么用的,你是怎么用的

我也在读一本jQuery的书,但它对.end()稍加修饰,没有给出它的用途的任何示例。有人能澄清一下吗

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

在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内部填充跨距,body不再在集合中

$('body').find('span').end() 
因为find是一个“破坏性”操作,它会恢复到我们之前的操作。find(),基本上un-DO或ctrl-Z是改变jquery集合的最后一个操作。

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

<div id="people">
 <ul>
   <li>A</li>
   <li>B</li>
 </ul>
 <ul>
   <li>C</li>
   <li>D</li>
  </ul>
</div>
并修改子元素,如

#('#people').find('ul').css('border', '1px solid #f00')
但是,如果要继续编辑父元素(#people),会发生什么?您可以启动一个新的finder$('#people'),或者只将其链接到第一行,前面加一个.end()以通知jQuery您要“关闭”find(),并将搜索范围返回到前面的find(隐含$('#people'),如是)


因此,这条线将:抓取所有“人物”的子元素,将其边框更改为红色,然后将父元素“人物”元素的边框更改为虚线和蓝色。

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

$('.tree')
    .find('.branch')
        .find('.leaf')
        .addClass('tacks-onto-leaf')
        .end()
    .addClass('tacks-onto-branch')
    .end()
.addClass('tacks-onto-tree');
它将链接JQuery语句的“范围”回退到上一级

jQuery对象中的标记最初为[$('p')]:p,p

jQuery对象中find[$('p')之后的标记。find('SPAN')]:SPAN,SPAN,SPAN,SPAN,SPAN

jQuery对象中结束[$('p')之后的标记。查找('SPAN')。结束()]:p,p

$('span')//文档中的所有标记
.find('#foo')//所有id为foo的
.addClass('blinkyRed')//添加类blinkyRed
.end()//将作用域还原为所有标记
.addClass('Bold')//将类加粗添加到所有标记中

以下函数可用于更改您的jQuery选择,通常用于使您的选择更具体,或更具包容性/排他性:

添加、andSelf、子级、筛选、查找、映射、下一步、下一步、非、父级、父级、上一级、上一级、上一级、同级、切片、克隆、附加到、前置到、插入之前、插入之后或替换全部


.end()
可用于在对扩展选择进行某些操作后,将选择重置回原始元素集。

查找
没有破坏性。它只返回一个新的包装集。这个新的包装集引用了创建它的原始集,仅此而已。”我们使用了破坏性操作find(),它将整个对象集合更改为在body内部填充跨距,body不再位于集合$('body')。find('span')。end(),因为find是一个“破坏性”操作“它还原到之前的操作。find(),基本上是un-does或ctrl-Z是最后一个更改jquery集合的操作。”我不理解这些语句。@Josh Pearce-$('body')返回一个带有body的数组。$('body')。find('span'))将返回一个带有跨距的数组。当我们使用“.find”时,它改变了我们原来的返回。这就是为什么他们将其标记为破坏性操作。@Crescent Fresh“破坏性”操作是指任何更改匹配的jQuery元素集的操作,这意味着任何返回jQuery对象的遍历函数,包括add、andSelf、children、,筛选、查找、映射、下一步、下一步、非、父级、父级、上一级、上一级、上一级、兄弟级和切片-加上克隆、附加、预结束、插入之前、插入之后和替换所有函数(来自操纵)“@meder:fair.”“在讨论中的定义往往很模糊。在jQuery
find
中,内部调用
pushStack
,用于在1.0天内对包装集
进行变异()。现在
pushStack
每次都返回一个新的包装集,不再对
中的元素进行变异!除了视觉能力之外,缩进还有助于思维的逻辑能力。这个解释在我脑海中出现了,太好了!所以它有点
break来自当前范围
#('#people').find('ul').css('border', '1px solid #f00')
#('#people').find('ul').css('border', '1px solid #f00').end().css('border', '1px dashed #00f')
$('.tree')
    .find('.branch')
        .find('.leaf')
        .addClass('tacks-onto-leaf')
        .end()
    .addClass('tacks-onto-branch')
    .end()
.addClass('tacks-onto-tree');
$('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