我正在尝试进行以下选择:
$(".program", row)
其中“row”是包含两个表行的jQuery对象。其中一个tr有类“程序”。这个选择器似乎找不到它。但是以下工作:
$(".title", row)
其中div.title是tr.program的后代。
如果我使用jQuery对象作为选择器上下文,我是否无法匹配该jQuery对象的顶级元素?
感谢,
-Morgan
答案 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本身可能存在问题。