为什么jQuery选择了错误的元素?

时间:2013-06-04 08:11:54

标签: jquery jquery-selectors

我有2个jQuery选择表达式:

(1) $('html body table tbody tr td:nth-child(2) table tbody tr td table:nth-child(1) tbody tr:nth-child(2) td table tbody tr td:nth-child(2)')

VS

(2) $('html body table tbody tr td table tbody tr td table tbody tr td table tbody tr td')

我可以理解第一个比第二个更明确,所以如果(1)返回一个元素,它必须也包含在(2)返回中。可能是(2)可以有多个元素(在我的例子中),所以它应该返回一个匹配元素的数组,不是吗?相反,它返回一些完全不同的元素,并且只返回一个(实际上它只返回第一个匹配,但不是全部匹配,包括那个匹配(1)select表达式)。我是否误解了css / jquery-selectors的任何选择概念?

更新1:

我尝试选择的页面是:

http://www.multitran.ru/c/m.exe?l1=1&l2=2&s=hello

更新2:

我拥有的选择器 - 这是chrome' get xpath工具的结果(只是想快速获得jquery的好选择器)

2 个答案:

答案 0 :(得分:3)

查看您链接的页面,您似乎没有加载jQuery,我可以看到。你有一个$对象,但很多东西都使用这个缩写。页面上似乎没有jQuery对象,但这让我相信你在该页面上拥有的任何东西都不是jQuery。

答案 1 :(得分:1)

jQuery选择器总是返回元素集合,即使只有一个元素也是如此。逻辑上仅使用一个元素的方法仅适用于集合的第一个元素,即使在具有多个元素的集合上调用也是如此。您可以使用旧的.length属性或现代的oo-fanatic .size()方法检查集合中元素的数量。两者都会返回相同的结果。

您可以使用旧的for结构迭代集合,并使用collection.eq(i)访问当前元素。或者,最好,您可以使用collection.each(func)对集合的每个元素执行一个函数。函数func将使当前元素可用。

而且,严肃地说,您不需要在选择器中指定DOM树中的每个元素。当然jQuery会搜索html和body,因为在正确的html文件中没有别的办法。最佳做法是包含唯一标识要选择的元素所需的最少数量的选择器。永远不要指定html和body。您的选择器中永远不会有两个ID。除非你需要的元素也可以出现在thead或tfoot中,并且你不需要那些出现,否则不要指定tbody。这样的事情。