3

请看这张图片:

在此处输入图像描述

有人可以解释其中的区别吗?

编辑

让我指出让我感到困惑的地方。请注意:

  1. $row.is('tr.items:last') === false
  2. $row[0].id === $('tr.items:last')[0].id

这两种说法似乎相互矛盾。第一个告诉我们,这$row不是最后一个tr.items。但第二个告诉那$row是确切$('tr.items:last')的,即最后一个tr.items

选择器不会发生这样的事情:last-of-type

这里发生了什么?

4

3 回答 3

5

last-of-type是一个CSS伪类,它表示给定标签名称的最后一个兄弟。如果浏览器支持并且您没有使用 jQuery-only 选择器,它可以用作 jQuery 选择器;否则,它将使用不支持它的 Sizzle。请参阅jQuery 票证。querySelectorAll()

另一方面,:last是一个jQuery选择器,它选择最后匹配的元素。

于 2012-09-01T14:40:27.930 回答
1

jQuery.is在设置过滤器(如:last. 关键是它通常.filter在当前集合上使用并检查过滤后是否有任何元素。

这适用于以下情况:

$("<a></a><b></b>").is("b");  // true, there is a <b> after filtering

但是对于:last这个失败,因为这样的过滤器是相对于集合的。考虑一个包含两个元素的文档:

$("a:first").is("a:last");  // would be true if the same method was used,
                            // because in the set with the first <a> element,
                            // the last <a> element is that element. So filtering
                            // with `a:last` yields something, and `.is` gets you
                            // true.

这与您的预期相反。因此,jQuery 改为a:last在当前上下文中搜索并检查a:first该集合中是否明显。

您的问题是$(ev.target)(in handleKeyDown) 使上下文成为输入元素而不是文档(这是通常的情况)。在这种情况下找不到Notr.items并且你得到false. 这可以说是 jQuery 中的一个错误。

无论如何,你可以做的是检查一个集合。反正使用相应的函数会更快一些:

$row.is( $("tr.items").last() );  // true
于 2012-09-02T12:46:09.163 回答
0

:last-of-type选择具有指定标签名称的最后一个兄弟。请注意,这:last-of-type不是“官方”的 jQuery 选择器,仅适用于某些浏览器 - 特别是那些支持的浏览器document.querySelectorAll()(除 IE 之外的所有内容的较新版本)。

于 2012-09-01T14:42:03.370 回答