0
<html>
<head>
    <script  src="jquery-1.4.4.js"></script>
    <script>


        $('table').each(function(a, tbl) {
            var currentTableRows = $(tbl).attr('rows').length - 1;
            $(tbl).find('th').each(function(i) {
                var remove = 0;
                var currentTable = $(this).parents('table');

                var tds = currentTable.find('tr td:nth-child(' + (i + 1) + ')');
                tds.each(function(j) { if (this.innerHTML == '') remove++; });

                if (remove == currentTableRows) {
                    $(this).hide();
                    tds.hide();
                }
            });
        });

    </script>
</head>
<body>
    <table  border="1" >  
        <tr><td colspan="4" > alaa </td></tr>
        <tr><th>Column1</th><th>Column2</th><th>Column3</th><th>Column4</th></tr>
        <tr ><td>1st</td><td>1.1</td><td></td><td></td></tr>
        <tr class="data"><td>2nd</td><td>2.1</td><td></td><td></td></tr>  
        <tr class="data"><td>3rd</td><td>3.1</td><td></td><td>1</td></tr>  
        <tr class="data"><td>4th</td><td></td><td></td><td></td></tr>
        <tr ><td></td><td></td><td></td><td></td></tr>
        <tr class="data"><td></td><td></td><td></td><td></td></tr>  
    </table>

</body>

这是我的代码...我认为是库的问题,所以我尝试了很多库,例如 jQuery 1.4.4 、 1.5.2 等

这是测试,它在那里工作正常http://jsfiddle.net/nlovatt/JsLn8/

但在我的文件中..它不起作用..

问候,

4

2 回答 2

2

您的代码不起作用有两个原因。

1)您在加载后立即执行脚本HEAD,在这个阶段,您的表不存在,因此它什么也不做。要解决此问题,请确保在页面加载时执行它。

2)当您将列中的空白单元格的数量与表格中的总行数进行比较时,您错过了这样一个事实,即您的大多数列与表格的行数不同(您的第一行只有一列宽)。您需要与实际列中的行数进行比较,或者更好的是,只需执行相反的操作并检查非空列。

完整的代码就变成了:

$(document).ready(function() {
    $('table').each(function(a, tbl) {
        $(tbl).find('th').each(function(i) {
            var remove = true;
            var currentTable = $(this).parents('table');
            var tds = currentTable.find('tr td:nth-child(' + (i + 1) + ')');
            tds.each(function(j) { if (this.innerHTML != '') remove = false; });
            if (remove) {
                $(this).hide();
                tds.hide();
            }
        });
    });
});
于 2012-07-11T10:59:00.653 回答
0

像这样试试

    $('#mytable tr th').each(function(i) {
   //select all td in this column
    var tds = $(this).parents('table')
          .find('tr td:nth-child(' + (i + 1) + ')');
    //check if all the cells in this column are empty
    if(tds.length == tds.filter(':empty').length) { 
        //hide header
        $(this).hide();
        //hide cells
        tds.hide();
    } 
    });

如果列中的所有单元格都为空,则隐藏表中的列

于 2012-07-11T10:49:49.867 回答