2012-08-09 20 views
4

我想构建一个jQuery插件来锁定表格中的行或列。 (还有其他一些很好的解决方案,但没有一个是因为各种原因为我工作的,我认为这可能与表格在模式弹出窗口内有关系,但我会离题)只用jQuery选择第一层的后代 - 有没有更好的方法?

作为这个的一部分,我试图选择在插件选项中指定的特定表的第一行或者第一列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

我想想我从这里收集的是,我需要在外部桌上有一个ID。多谢你们!希望我可以接受多个答案。 – Yumecosmos 2012-08-09 15:58:35

+0

糟糕。这几乎是http:// stackoverflow的完全重复。com/questions/6031638/get-most-upper-descendant -decendants-in-jquery数字,我搜索了一个星期,然后在发布我的信息3小时后找到相同的问题。 > _ < – Yumecosmos 2012-08-09 18:29:58

回答

1

给你的表中的“ID”,让您有一个起点和使用直接孩子选择

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

为Tr可以是表,TBODY,或THEAD下特定表

2

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

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

请参阅“jQuery Selectors”其他选项。

或者,只是迭代的tbody所有直接孩子:

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

由于只有tdtr被允许作为tr孩子,应该已经是你想要的清单。

+0

我有点困惑,这将如何解决我的问题...嵌套的'​​'仍然是''的直接孩子,所以不会选择它们吗? (对不起,我对CSS3选择器仍然有些模糊。) – Yumecosmos 2012-08-09 15:22:26

+0

对不起,你需要从表格开始。 – 2012-08-09 15:24:19

相关问题