:last和.last don';t返回与jQuery 2.1相同的内容

:last和.last don';t返回与jQuery 2.1相同的内容,jquery,Jquery,由于使用jQuery2.1(从1.8迁移)中的:last过滤器的结果发生了变化,我们的代码中遇到了一个bug 如果我们将其更改为use.last(),它的工作方式与以前相同。 我明白这些应该返回相同的东西,尽管方式略有不同。 这是一个bug还是可以解释的 下面是一些示例HTML <div id="root"> <span class="k-in k-state-selected k-state-focused"> <img class="k-image" a

由于使用jQuery2.1(从1.8迁移)中的:last过滤器的结果发生了变化,我们的代码中遇到了一个bug

如果我们将其更改为use.last(),它的工作方式与以前相同。 我明白这些应该返回相同的东西,尽管方式略有不同。 这是一个bug还是可以解释的

下面是一些示例HTML

<div id="root">
<span class="k-in k-state-selected k-state-focused">
    <img class="k-image" alt="test" src="">test</span>
</div>
在浏览器中显示控制台并运行此小提琴以查看不同的返回值

  • Sizzle(jQuery选择器引擎)中的
    last
    选择器仅适用于元素,我认为元素是一个节点,它具有
    nodeType
    3
  • $('#root').find('>.k-in').contents().last()
    返回集合中的最后一个元素,该集合是由
    contents
    创建的,它返回一组匹配的元素,包括文本和注释节点。在您的情况下,文本是最后一个:
  • 
    测试
    

    所以这不是一个bug,它是一个特性:)

    是否
    .contents()
    仍然接受任何争论?请参阅。这可能是因为
    last
    选择器仅应用于
    nodeType
    1
    @j809的节点,我没有检查,这可能是因为-我没有收到迁移警告(使用migrator)对,我必须确认,因为这一定已经更改了。因为如果您将jQuery库设置为1.8.3,在上面的Fiddle页面上,它们都返回完全相同的内容-即只返回文本。那么,问题是它是“更正”了jQuery2.1(在1.8.3之后)还是可以被认为是一个bug?谢谢,尽管我需要一个确认的来源,比如一些bug报告讨论,才能真正确信它是一个更正
    var lastFilter = $('#root').find('> .k-in').contents(':last')
    var lastFunction = $('#root').find('> .k-in').contents().last()
    
    console.log('lasterFilter=', lastFilter);
    console.log('lastFunction=', lastFunction);
    
    <div id="root">
        <span class="k-in k-state-selected k-state-focused">
            <img class="k-image" alt="test" src=""/>
            test
        </span>
    </div>