jquery-隐藏表中有行跨度的列

jquery-隐藏表中有行跨度的列,jquery,gridview,toggle,Jquery,Gridview,Toggle,我需要隐藏表中的列,但其中涉及行跨度,这会弄乱函数。谢谢你的帮助。下面是我的代码的链接: 下面是函数(在示例中,我试图隐藏第3列): 我最初对此很感兴趣,因为它看起来很琐碎,但事实上却令人难以置信。我尝试了各种方法来绕过行spans切换正确的单元格。我最初是昨天回答的,但我很快就把它删除了,因为我知道它失败得很惨 当我们说“第三列”时,并不一定意味着将是该行的第三个子行,因为就HTML和行span的工作方式而言 然后是顿悟:表格是完美的网格,因此,例如,作为第三列的所有单元格都有一个共同点,它

我需要隐藏表中的列,但其中涉及行跨度,这会弄乱函数。谢谢你的帮助。下面是我的代码的链接:

下面是函数(在示例中,我试图隐藏第3列):


我最初对此很感兴趣,因为它看起来很琐碎,但事实上却令人难以置信。我尝试了各种方法来绕过
行span
s切换正确的单元格。我最初是昨天回答的,但我很快就把它删除了,因为我知道它失败得很惨

当我们说“第三列”时,并不一定意味着
将是该行的第三个子行,因为就HTML和
行span的工作方式而言

然后是顿悟:表格是完美的网格,因此,例如,作为第三列的所有单元格都有一个共同点,它们都有相同的左偏移量

这是迄今为止我能得到的最接近的方法,这可能是一种基于一个重要假设的有点激进的方法:整个表中不涉及任何
colspan
s。(否则,一切都会变成粪便)

此演示允许您切换任何所需的列,希望具有任何行跨度复杂性

(如果有更优雅的解决方案,我当然想了解自己)

演示


我最初对此很感兴趣,因为它看起来很琐碎,但事实上却令人难以置信。我尝试了各种方法来绕过
行span
s切换正确的单元格。我最初是昨天回答的,但我很快就把它删除了,因为我知道它失败得很惨

当我们说“第三列”时,并不一定意味着
将是该行的第三个子行,因为就HTML和
行span的工作方式而言

然后是顿悟:表格是完美的网格,因此,例如,作为第三列的所有单元格都有一个共同点,它们都有相同的左偏移量

这是迄今为止我能得到的最接近的方法,这可能是一种基于一个重要假设的有点激进的方法:整个表中不涉及任何
colspan
s。(否则,一切都会变成粪便)

此演示允许您切换任何所需的列,希望具有任何行跨度复杂性

(如果有更优雅的解决方案,我当然想了解自己)

演示

$('#toggle').click(function(){
var lastChilds = $('#tbl td:nth-child(3)');
lastChilds.each(function(i){
    var rowSpan = $(this).attr('rowspan');
    if(rowSpan !== undefined){
      lastChilds.splice(i+1, rowSpan-1);

    }
     $(this).toggle();

  });
    });
$(document).ready(function () {

    var $table = $('#tbl');

    (function scanTable($table) {

        var $rows = $table.find('tr'),
            $cells = $table.find('td'),
            map = {};

        // the first row will always have all n columns of cells,
        // so this is the safest row to collect each columns offset().left
        $rows.first().find('td').each(function (i, cell) {
            var $cell = $(cell),
                left = Math.floor($cell.offset().left);
            map[left] = i+1;
            $cell.attr({
                'data-nth-col': i+1
            });
        });

        // now for the rest of the rows, 
        $rows.not(':first').each(function (i, row) {
            var $row = $(row),
                $cells = $row.find('td');

            $cells.each(function (j, cell) {
                var $cell = $(cell),
                    left = Math.floor($cell.offset().left);
                $cell.attr({
                    'data-nth-col': map[left]
                });
            });
        });
    })($table); // scan the entire table ONCE. 
                // We don't want to do this on every toggle


    $('button[name=toggle]').on('click', function () {
        var n = +$(this).val();
        $table.find('td[data-nth-col='+n+']').toggle();
    });

});