使用 jQuery 只选择第一级后代 - 有没有更好的方法
Select only first level of descendants with jQuery - is there a better way?
我正在尝试构建一个jQuery插件来锁定Excel冻结窗格中的行或列。(对此还有许多其他很好的解决方案,但由于各种原因,它们都不适合我。我认为这可能与表位于模态弹出窗口内有关。但我离题了。
作为其中的一部分,我正在尝试选择插件选项中指定的特定表的前 n 行或列。问题是某些行包含其他嵌套表。不幸的是,我对此无能为力。所以我的问题是,如何在表中仅获得第一级<tr>
?使用 .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() 快。给我的消息。
使用正确的选择器。在这种情况下,这将是>
,直接子选择器:
$el.find('#table > tbody tr > td, #table > tbody tr > th');
有关其他选项,请参阅"jQuery 选择器"。
或者,只需迭代tbody
的所有直接子级:
var cells = $el.children('tbody').children('tr').children();
由于只允许td
和tr
作为tr
的子项,因此这应该已经是您想要的列表。
给你的表一个"ID",这样你就有一个起点,并使用直接子选择器
$('tableID, tableID > tbody,tableID > thead, tableID > tfoot').children('tr')
因为 tr 可以位于该特定表的表、正文或标题下
相关文章:
- 如何使用nodejs步行模块将目录遍历到第一级
- 使用 jQuery 只选择第一级后代 - 有没有更好的方法
- 我可以让事件在发起者和后代之间传播吗
- 如何删除jQuery组中其他成员的后代元素
- javascript只返回字符串的一级域名
- 知道可观察的在根模型中的位置,在 foreach/后代绑定中被淘汰
- 带有 querySelectorAll 的无效选择器 :不带后代
- 可以直接选择第一个后代
- 使用 jquery 计算页面中一级 UL LI 的数量
- 窗口位置向上一级
- 类后代扰乱事件
- 尝试使用 hasAttribute 识别父级的后代时出现未定义的错误
- JavaScript Memory Leak - DOM 节点和后代上的垃圾回收
- 父后代 jquery 选择器中出现奇怪的错误
- 如何使用jQuery获取后代span元素
- $(这个)选择器和他的后代
- 文本没有所有后代节点的 JS 内容
- 使用jQuery查找最接近后代的方法更有效
- 获取包含所有后代的纯文本形式的元素内容
- 在没有匹配的后代元素时隐藏父元素