隐藏表格列

时间:2015-12-31 19:10:35

标签: jquery

我有一个'通用目的'表格由9列组成。该表由客户填写。前3列和最后一列是必填字段。其余5列是可选的。客户可以在这些必填列之间填充1个或全部5个可选列。客户端决定5个可选列的标题/标题。这些标头是从客户端到达此表之前填充的客户端表单中提取的。 为简单起见,我只显示3行和这些列。在实践中,列最多可以为35,行最多可以为500.此外,完成按钮是早期表单的一部分(此处未描述)。单击时,将显示一个表,其中包含客户端选择的列。 该表中的数据提供了其他表格和表格。涉及不同阶段的计算。最后,客户可以查看&打印这些表以及与此表关联的所有其他报告(此处未描述)。 到目前为止,我的数据传输,计算等都可以。除了视图和&打印此表。虽然我的脚本隐藏了BLANK列(单击完成时),但空白列的SPACE仍然显示。如果客户端仅使用5个Optional列中的1列,则为WORST。 我不希望使用复选框或特殊按钮隐藏未使用的可选列,如我遇到的某些解决方案中所建议的那样。 我想到的一个解决方案是将桌子向左旋转90度,以便所有的桌子都是垂直的并且在左边。此方法将隐藏空行而不离开SPACE。如果可能的话,我不想使用这种方法。 请看看我尝试过的2个脚本,但没有删除空格。建议如何在隐藏列时删除留下的空间。注意,在此步骤之后使用行,单元格索引进行一些计算。 在css下面:

    <style type="text/css">
    body {font-family: Arial, Verdana, Helvetica,Sans-serif;}
    th,td {font-size: 12px; border: 1px; border-style: solid; margin: 0px; border-spacing: 0px;}
    .btn {font-size: 14px; font-weight: bold; text-align: center; max-width: 75px;}
    .btn:hover {background-color: rgb(0,250,0);}        
    .hidetf {visibility: hidden; width: 0px; height: 0px; padding: 0px; border: 0px; margin: 0px;}
    </style>

接下来是html:

            <table id='sdtbl'>
    <caption id='sdtblhdr'></caption>
    <thead> 
    <tr>
    <th>s/n</th>
    <th>id</th>
    <th>Names</th>      
    <th>SCRD2tpf</th>
    <th>YHUJ56ty</th>
    <th></th>
    <th></th>
    <th></th>
    <th>Remarks</th>        
    </tr>
    </thead>
    <tbody>     
    <tr>
    <td>1</td>
    <td>PKC1</td>
    <td>LCT1</td>
    <td><input type="text"></td>        
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td></td>
    </tr>       
    <tr>
    <td>2</td>
    <td>PKC2</td>
    <td>LCT2</td>
    <td><input type="text"></td>        
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td></td>
    </tr>       
    <tr>
    <td>3</td>
    <td>PKC3</td>
    <td>LCT3</td>
    <td><input type="text"></td>        
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td><input type="text"></td>
    <td></td>
    </tr>       
    <tfoot> 
    <tr>
    <td class='hidetf'></td>
    <td class='hidetf'></td>
    <td>Summary</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>           
    </tr>
    </tfoot>
    </table>
    <br>        
    <input class='btn' onclick="finish()" value="Finish"></p>

以下是我单独尝试过的脚本:

    <script>
    function finish(){
        var sdtbl = document.getElementById('sdtbl');
        var x = sdtbl.rows[0].cells.length;
        var y = sdtbl.rows.length;  
        //Hide unused Bonus & Deduction payroll headers
        for (var i = 0; i < x; i++) {
            var hdr = sdtbl.rows[0].getElementsByTagName('th')[i];
            var val = hdr.innerHTML;        
            if (val === "") {
                $('#sdtbl tr').eq(0).find('td').eq(i);
                for (var j = 1; j < y; j++) {                       
                    $('#sdtbl tr').eq(j).find('td').eq(i);              
                }           
            }       
        }
    }
    </script>



    <script>
    function finish(){
        var sdtbl = document.getElementById('sdtbl');
        var x = sdtbl.rows[0].cells.length;
        var y = sdtbl.rows.length;  
        //Hide unused Bonus & Deduction payroll headers
        for (var i = 0; i < x; i++) {
            var hdr = sdtbl.rows[0].getElementsByTagName('th')[i];
            var val = hdr.innerHTML;        
            if (val === "") {
                hdr.setAttribute('class', 'hidetf');
                for (var j = 1; j < y; j++) {                       
                    sdtbl.rows[j].getElementsByTagName('td')[i].setAttribute('class', 'hidetf');                
                }           
            }       
        }
    }
    </script>

1 个答案:

答案 0 :(得分:0)

我刚刚在脚本中发现了错误。纠正错误后,第一个脚本正常工作。我应该像在html中那样使用th作为标题行而不是td。我还添加了缺少的.hide() 第二个脚本虽然隐藏了列,但仍会显示它隐藏的任何列的空间。 请注意,之前已经发布了正确的脚本,但是有切换按钮,复选框等,这并不能满足我的需求。 没有复选框或切换按钮,此脚本工作正常。

<script>
function finish(){
    var sdtbl = document.getElementById('sdtbl');
    var x = sdtbl.rows[0].cells.length;
    var y = sdtbl.rows.length;  
    //Hide unused Bonus & Deduction payroll headers
    for (var i = 0; i < x; i++) {
        var hdr = sdtbl.rows[0].getElementsByTagName('th')[i];
        var val = hdr.innerHTML;        
        if (val === "") {
            $('#sdtbl tr').eq(0).find('th').eq(i).hide();
            for (var j = 1; j < y; j++) {                       
                $('#sdtbl tr').eq(j).find('td').eq(i).hide();              
            }           
        }       
    }
}
</script>