jQuery选择器上下文问题

时间:2009-02-16 15:54:52

标签: javascript jquery

我正在尝试进行以下选择:

$(".program", row)

其中“row”是包含两个表行的jQuery对象。其中一个tr有类“程序”。这个选择器似乎找不到它。但是以下工作:

$(".title", row)

其中div.title是tr.program的后代。

如果我使用jQuery对象作为选择器上下文,我是否无法匹配该jQuery对象的顶级元素?

感谢,

-Morgan

4 个答案:

答案 0 :(得分:6)

看起来你正在尝试从已经选择的元素中选择元素(驻留在jQuery对象中)。

就jQuery而言,上下文就像指定一个父类一样 - 上下文是一个节点,它位于DOM树中你正在寻找的东西之上。上下文是jQuery将查找您指定的选择器的位置。

如果我对你试图做的事情是正确的,那么这应该有效:

row.filter('.program');

// And then:
row.filter('.program').find('.title');

答案 1 :(得分:2)

我的理解是上下文需要是根级别,即您想要进行选择的父级。

修改 现在已经完成了一些阅读,你应该能够匹配上下文的顶级元素  (默认上下文为document)。

Beardscratchers有一篇关于在jQuery选择器中使用上下文的文章。通常,您应该尝试将元素id作为jQuery包装集的上下文传递,因为它是定位元素的最高效方式。

在内部,选择器上下文使用.find方法实现,因此$(selector, context)等同于$(context).find(selector)

答案 2 :(得分:0)

你和后代走在了正确的道路上。将上下文传递给选择器会搜索在该上下文中找到的所有后代。

在您的情况下,由于对象不是“包含两行的父”,而是“行的集合”,因此.program不可选。由于.title 是您馆藏中的实际后代,因此可以选择。

答案 3 :(得分:-1)

你当然能够匹配顶级元素。我们能看到您使用的来源吗?您的代码应该正常工作,因此HTML本身可能存在问题。