我正在尝试构建一个jQuery插件来锁定表格中的行或列,以及Excel的冻结窗格。 (还有很多其他很好的解决方案,但是由于各种原因,它们都没有为我工作。我认为这可能与表格在模态弹出窗口中有关。但我离题了。)
作为其中的一部分,我试图选择插件选项中指定的特定表的第一个 n 行或列。问题是某些行包含其他嵌套表。遗憾的是我无能为力。所以我的问题是,如何在表格中仅获得<tr>
的第一级?使用.children('tr')
并不总是有效,因为该行不一定是表的直接子项 - 可能有<thead>
或(理想情况下)用户可以调用包含元素的插件,它应该足够聪明,可以在其中找到表格
编辑:实际上,如果我们必须按ID选择表格,我现在认为第二位不会起作用。但是我觉得要求人们只在桌面上使用插件并不是太多,因为那就是它的用途......
简而言之:我如何只选择第一级表行,这些表行可能是也可能不是特定包含元素的直接子项?
到目前为止,基于this answer的后半部分我想出的是:
$el.find('tr:not(tr tr):lt('+base.options.rows+')')
和列:
$el.find('tr:not(tr tr)').find('(td,th):lt('+base.options.columns+')')
但这看起来非常漫长而笨重,我想知道是否有更短/更清洁的方式。或者有没有办法只使用普通的旧JavaScript?
编辑2: Apparently the selector version is actually faster than .not()。给我的消息。
答案 0 :(得分:2)
使用正确的选择器。在这种情况下,那将是>
,直接子选择器:
$el.find('#table > tbody tr > td, #table > tbody tr > th');
有关其他选项,请参阅“jQuery Selectors”。
或者,只需迭代tbody
的所有直接孩子:
var cells = $el.children('tbody').children('tr').children();
由于只允许td
和tr
作为tr
的子项,因此该列表应该已经是您想要的列表。
答案 1 :(得分:1)
为您的表格提供“ID”,以便您有一个起点并使用直接子选择器
$('tableID, tableID > tbody,tableID > thead, tableID > tfoot').children('tr')
因为tr可以在特定表的表格,tbody或thead下面