2011-03-28 85 views
19

我需要动态改变html/js表中列的顺序,你可以告诉我该怎么做? 谢谢大家!更改表列顺序

+0

改变列是艰难的,不断变化的行很容易 – 2011-03-28 19:47:24

+0

使用表格插件。 http://plugins.jquery.com/projects/plugins/tables – 2011-03-28 19:48:14

+1

你应该在这里提供更多细节。你是否希望允许用户拖放列的顺序?你需要这种灵活性有多大? – jessegavin 2011-03-28 19:48:34

回答

25

如果你只需要简单地移动列,没有任何花哨的拖放动画,下面的JS应该做的伎俩:

<script type="text/javascript"> 
    $(function() { 
     jQuery.each($("table tr"), function() { 
      $(this).children(":eq(1)").after($(this).children(":eq(0)")); 
     }); 
    }); 
</script> 

根据需要更换号码。这个概念的工作原理

看起来,写这个作为一个班轮是不可能的。包括选择器中的td,即使行选择器似乎在一个单独的索引上保留了每个td,而忽略了行。

一个jQuery网格插件应该这样做,否则。虽然我没有这种插件的经验。

+0

嗯..不要敲这个答案,但为什么切换正确的答案?我会为我提供可重用性的优势。 – typeof 2011-03-28 20:42:17

+1

这是不坏的,只是要知道,如果有合并单元格(即:rowspan> 1),它将无法工作 – Benja 2011-10-26 03:33:34

+0

我对这个做了一个小改动,而不是在儿童中使用一个选择器,它更容易连锁.eq(1)例如。这使得它更容易传递参数:) – 2012-04-12 22:18:52

29

移动列并不难:

您可以使用此功能:

jQuery.moveColumn = function (table, from, to) { 
    var rows = jQuery('tr', table); 
    var cols; 
    rows.each(function() { 
     cols = jQuery(this).children('th, td'); 
     cols.eq(from).detach().insertBefore(cols.eq(to)); 
    }); 
} 

然后调用它像这样:

var tbl = jQuery('table'); 
jQuery.moveColumn(tbl, 2, 0); 

因此,通过了解该列的索引,以及您想要放置它的索引(从零开始),您可以移动列,包括列标题。

这里是工作的jsfiddle:http://jsfiddle.net/Qsys7/1/

+0

作为其他解决方案,可能已经足够,但它不适用于合并的单元格(即rowspan> 1) – Benja 2011-10-26 03:34:40

+0

试过了,当我尝试做tbl时不起作用, 0,6(将第一列移到最后一位)。相反,我不得不做1,0 => 2,1 => 3,2 ... 6,5将第一列放在lastp花边 – WizLiz 2014-11-13 08:27:00

+0

修改代码以允许将列移动到最后一列。请参阅:http://jsfiddle.net/fyq9em36/ – Keeper 2015-11-06 14:19:29

0

这里是一个jQuery插件,我刚写来切换两列的内容:

$.fn.switchColumns = function (col1, col2) { 
    var $this = this, 
     $tr = $this.find('tr'); 

    $tr.each(function(i, ele){ 
     var $ele = $(ele), 
      $td = $ele.find('td'), 
      $tdt; 

     $tdt = $td.eq(col1).clone(); 
     $td.eq(col1).html($td.eq(col2).html()); 
     $td.eq(col2).html($tdt.html()); 
    }); 
}; 

See example →

+0

试过这个,它实际上只切换单元格的内容而不是列本身。如果你有td元素对它们中包含的内容很重要,这是行不通的。如果你没有这些要求,概念就起作用了。 – 2012-04-12 22:17:27

+0

如果列上有'width'属性或其他样式属性,则移动列的内容并不那么聪明。你只是结束了宽列更窄,反之亦然。 – cartbeforehorse 2014-07-02 22:26:07