Javascript 使用JQuery选择标题之间的所有表行

Javascript 使用JQuery选择标题之间的所有表行,javascript,jquery,forms,dom,Javascript,Jquery,Forms,Dom,具有以下自动生成的表布局(我几乎不影响它) 一第一标题 有问题吗? 第二个标题 。。。我想使用Javascript/jQuery选择两个标题之间的所有-元素 为了提供以下功能: 隐藏属于某个标题的所有问题 自动编辑s(例如,选中/取消选中全部或恢复默认) 导致所需操作的链接已在正确的标题中 解决此问题的最佳方法是什么?您可以使用它来解决此问题 function getRows(start){ return start.nextUntil(function(i, v){

具有以下自动生成的表布局(我几乎不影响它)


一第一标题
有问题吗?
第二个标题
。。。我想使用Javascript/jQuery选择两个标题之间的所有
-元素 为了提供以下功能:

  • 隐藏属于某个标题的所有问题
  • 自动编辑
    s(例如,选中/取消选中全部或恢复默认)
导致所需操作的链接已在正确的标题中

解决此问题的最佳方法是什么?

您可以使用它来解决此问题

function getRows(start){
    return start.nextUntil(function(i, v){
        return $('th', v).length > 0;
    });
}
演示:

显示/隐藏的实现

$('table').on('click', '.used-for-some-action', function(){
    getRows($(this).closest('tr')).toggle();
    return false;
});
演示:

更新:
基于@BLSully的评论

$('table').on('click', '.used-for-some-action', function(){
    $(this).closest('tr').nextUntil('tr:has(th)').toggle();
    return false;
});

演示:

我喜欢阿伦·约翰尼的答案。以下是我最初的想法(这段代码实现了隐藏/显示功能)

小提琴:试试这个:

$("tr:has(th)").each(function(){
    if ($(this).find('th').length==2) {
        // here you have this: that represent the row which have two td
    }
})

我会保持简单。您使用的是JavaScript,因此当页面加载时,只需使用
向行添加一个类,然后使用该类

$(function() {
    $("th").parent().addClass("hasTH");
});
然后,您可以简单地将具有
hasTH
类的行作为目标



另一种选择是在页面加载时仍然这样做,但不是添加类,而是将行分组到新的
元素中。这将为您提供最纯粹的DOM表示。

一个好的开始是在每个包含标题的
中添加一个类,这样当您遍历DOM时,您就不必不必要地通过父/子对象上下移动。但是他无法控制HTML。您想选择
还是
s@MahmoudFarahat我实际上只想选择包含
s的
s。我称之为问题块。
nextUntil
…这个方法到底是从哪里来的?!哈哈,从没听说过,好主意:)@Arun P Johny我应该如何对每个元素执行操作?穆罕默德·阿里在他的回答中说,我应该使用
这个
。这是迄今为止最好的答案。为了论证起见,另一种选择可能是:
start.nextUntil('tr:has(th)')
@BLSully是的,这是最好的one@BLSully也许你应该把它作为一个答案,这真的可能吗?我一直认为表中只能有一个
。@Jakub:可以有任意多个
。这是他们观点的一部分。它提供了一种对行进行逻辑分组的有效方法。如果因为不控制源代码而需要修复DOM,我会采用这种方法,因为这是我在服务器上所做的……无论哪种方式,我都会避免重复复杂的DOM选择,而倾向于修复DOM,以提供如果控制源代码就可以创建的干净的选择过程。
$("tr:has(th)").each(function(){
    if ($(this).find('th').length==2) {
        // here you have this: that represent the row which have two td
    }
})
$(function() {
    $("th").parent().addClass("hasTH");
});