1

我有 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)')

对比

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

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

更新1:

我尝试选择的页面是:

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

更新 2:

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

4

2 回答 2

3

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

于 2013-06-04T08:44:29.117 回答
1

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

您可以使用 good old for 结构遍历集合,并使用 collection.eq(i) 访问当前元素。或者,您可以使用 collection.each(func) 对集合的每个元素执行一个函数。函数 func 将使当前元素作为 this 可用。

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

于 2013-06-04T08:36:56.887 回答