2013-06-27 136 views
1

JQUERY中是否有删除表中空列的函数? 我附上了示例屏幕截图,以便更好地理解。如何删除表中的空列

由于MID表中还包含合并单元格。 enter image description here

我试过这段代码,由于某种原因,浏览器只是继续显示加载和浏览器挂起。

var $theTable = $("table#myTable"), 
    lookAt = ["tr:first-child", "tr:last-child", 
       "td:first-child", "td:last-child"]; 

for (var i=0; i<lookAt.length; i++) { 
    while ($.trim($(lookAt[i], $theTable).text()) == "") { 
    $(lookAt[i], $theTable).remove(); 
    } 
} 
+0

'而($ .trim($(的lookAt [I],$ theTable)的.text ())。is(':empty'))'你可以试试这个来检查空值吗? – Praveen

+0

检查此[小提琴](http://jsfiddle.net/praveen_jegan/DeQHs/201/) – Praveen

回答

1

只给其它选项:

$('td:empty').each(function(i){ 
$(this).hide().parents('table').find('th:nth-child('+(i+1)+')').hide(); 
}); 
1

您可以使用,从jQuery remove()。但是,你应该把所有的ID对TD或TR虽然

1

你可以试试下面一个,

<table border="1"> 
    <tr> 
     <td>col1</td> 
     <td></td> 
     <td>col3</td> 
    </tr> 
    <tr> 
     <td>col1</td> 
     <td></td> 
     <td>col3</td> 
    </tr> 
</table> 

的jQuery:

$('table tr td').each(function (i) { 
    alert("To show difference"); 
    //select all tds in this column 
    var tds = $(this).parents('table') 
     .find('tr td:nth-child(' + (i + 1) + ')'); 
    if (tds.is(':empty')) { 
     $(this).remove(); 
     tds.remove(); 
    } 
}); 
+0

请分享您的downvote的理由? – Praveen

+0

我认为你应该在表中添加第th个元素,因为你现在运行你的脚本集合th的长度为0。 – mkutyba

2

我想这没有任何jQuery函数删除空柱子,但您可以使用代码波纹管创建一个:

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

JSFIDDLE

提示:使用的hide()代替remove()增加操作的速度,因为从HTML追加和删除元素是需要更多的存储器操作。

+0

它在这种情况下失败http://jsfiddle.net/arunpjohny/DeQHs/202/ –

2

尝试

var $table = $('table'); 

var $frow = $table.find('tr').first(); 

$frow.find('td').each(function(idx, td){ 
    var cols = $table.find('tr').not($frow).find('td:eq(' + idx + ')'); 
    var emptycells = cols.filter(function(idx, el){ 
     return $(el).is(':empty'); 
    }); 

    if(cols.length == emptycells.length){ 
     $table.find('tr').find('td:eq(' + idx + ')').remove() 
    } 
}) 

演示:Fiddle

+0

由于此片段,加载时间急剧增加以及系统挂起。 – Bharanikumar

+0

@Bharanikumar与其使用'remove()'使用'hide()',因为它更高效。看到我的答案。 –

+0

@Bharanikumar在http://jsfiddle.net/arunpjohny/Jf8Ht/2/看到更好的表演 –