:last和.last自jQuery 2.1以来不会返回相同的东西

时间:2014-07-29 04:30:12

标签: jquery

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

如果我们将其更改为使用.last(),它就像以前一样工作。 我知道这些应该返回相同的东西,尽管方式略有不同。 这是一个错误还是可以解释?

这里有一些示例HTML

<div id="root">
<span class="k-in k-state-selected k-state-focused">
    <img class="k-image" alt="test" src="">test</span>
</div>

一些jQuery:last vs .last()返回不同的结果:

var lastFilter = $('#root').find('> .k-in').contents(':last')
var lastFunction = $('#root').find('> .k-in').contents().last()

console.log('lasterFilter=', lastFilter);
console.log('lastFunction=', lastFunction);

在浏览器中显示控制台并运行此小提琴以查看不同的返回值。

http://jsfiddle.net/VfuLL/

1 个答案:

答案 0 :(得分:1)

    Sizzle中的
  1. last选择器(jQuery选择器引擎)仅适用于元素,我认为元素是一个节点,具有nodeType 3
  2. $('#root').find('> .k-in').contents().last()返回集合中的最后一个元素,该元素由contents创建,它返回匹配元素集,包括文本和注释节点。在你的情况下,文字是最后一个:
  3. <div id="root">
        <span class="k-in k-state-selected k-state-focused">
            <img class="k-image" alt="test" src=""/>
            test
        </span>
    </div>
    

    所以这不是一个错误,它是一个特征:)