4

我正在尝试构建一个 jQuery 插件来锁定表格中的行或列,例如 Excel 的冻结窗格。(还有许多其他好的解决方案,但由于各种原因,它们都没有为我工作。我认为这可能与表格位于模式弹出窗口内有关。但我离题了。)

作为其中的一部分,我试图选择插件选项中指定的特定表的前n行或列。问题是某些行包含其他嵌套表。不幸的是,我对此无能为力。所以我的问题是,我怎样才能<tr>在表中只获得第一级 s ?使用.children('tr')并不总是有效,因为该行不一定是表的直接子级 - 可能有一个<thead> 或(理想情况下)用户可能能够在包含元素上调用插件,并且它应该足够聪明以找到里面的表
编辑:实际上,现在我认为如果我们必须按 id 选择表,那么第二位将不起作用。但我认为要求人们只在桌子上使用插件并不过分,因为这就是它的用途......

简而言之:如何仅选择可能是也可能不是特定包含元素的直接子级的第一级表行?

到目前为止,根据这个答案的后半部分,我想出的是:

$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: 显然选择器版本实际上比 .not() 快。给我的消息。

4

2 回答 2

2

使用正确的选择器。在这种情况下,这将是>直接子选择器:

$el.find('#table > tbody tr > td, #table > tbody tr > th');

有关其他选项,请参阅“ jQuery 选择器”。

或者,只需遍历 的所有直接子代tbody

var cells = $el.children('tbody').children('tr').children();

由于 onlytdtr被允许作为 的子级tr,因此应该已经是您想要的列表。

于 2012-08-09T15:14:53.377 回答
1

给你的表一个“ID”,这样你就有一个起点并使用直接子选择器

$('tableID, tableID > tbody,tableID > thead, tableID > tfoot').children('tr')

因为 tr 可以在该特定表的 table、tbody 或 thead 下

于 2012-08-09T15:20:51.603 回答