end()与andSelf()

end()

回到最近的一个"破坏性"操作之前。即,将匹配的元素列表变为前一次的状态。

如 果之前没有破坏性操作,则返回一个空集。所谓的"破坏性"就是指任何改变所匹配的jQuery元素的操作。这包括在 Traversing 中任何返回一个jQuery对象的函数--'add', 'andSelf', 'children', 'filter', 'find', 'map', 'next', 'nextAll', 'not', 'parent', 'parents', 'prev', 'prevAll', 'siblings' and 'slice'--再加上 Manipulation 中的 'clone'。

end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态。

详细说明

大多数 jQuery 的遍历方法会操作一个 jQuery 对象实例,并生成一个匹配不同 DOM 元素集的新对象。当发生这种情况时,应该会把新的元素集推入维持在对象中的堆栈内。每次成功的筛选方法调用都会把新元素推入堆栈中。如果我们需要老的元素 集,可以使用 end() 从堆栈中弹出新集合。

andSelf()

andSelf() 方法把堆栈中之前的元素集添加到当前集合。

jquery是链式操作,意味着可以通过jquery对象获取另外一个jquery对象,比如:
var $div = $("div");
var $img = $div.find("img")

现在来解释你的问题
当进行以上操作时,jquery会记录一个类似链的东西:
$div -> $img
这个链说明,$img是由$div而来的,“而来的”三个字意思是$img和$div里面的dom对象是没有任何dom树上面的关系的,他们仅仅是一个来源问题

$img.andSelf()将查找该链的前一个对象并将前一个对象中的dom和当前对象中的dom合并,然后返回,相当于$("div,div img")

$img.end()将查找该链的前一个对象并直接返回前一个对象,相当于$img.end()包含的dom集合和$div包含的dom集合相同
原文地址:https://www.cnblogs.com/iceyhu/p/3479845.html