【问题标题】:jQuery: Sort a table column not rowsjQuery:对表格列而不是行进行排序
【发布时间】:2009-07-29 05:58:00
【问题描述】:

我想按列的头部字段对表格进行排序。表示我想将行保持在同一位置,但列的顺序应根据列标题字段(td)进行排序。

例如:

排序前的表格:

assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|
assign1|assign3|assign2|assign4|

排序后:

assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|
assign1|assign2|assign3|assign4|

@seth 我必须对带有标题的列进行排序(更改顺序)。

@CMS 我已经尝试过 tablesorter 插件和这个插件对行进行排序。意味着它以升序或降序更改行的顺序。

但我的问题不同,我必须更改列的顺序,其标题单元格按升序或降序排列。

请看我的例子。

【问题讨论】:

  • 标题文本是否与其列单元格相同?还是单元格中的文本会有所不同,但排序应该只基于标题?

标签: jquery sorting


【解决方案1】:

好的,这是我整理的。它可能不是最优雅或最干净的,但它确实有效。

// sorting function for the headers
function th_sorter(a, b) {
   // just compare the text
   var cmp = $(a).text() > $(b).text();
   if (cmp) {
     return 1;
   }
   else {
     return $(a).text() === $(b).text() ? -1 : 0;
   }
}

var sorted = [], temp=[];
// first sort the 1st row so we can figure out what goes where
$('table tr:first').each(
  function(i, tr) {
      $(tr).children('td').each( function(idx,node) {
        $(node).data('orig', idx);
      }).sort( th_sorter ).each( function(idx, node) {
        sorted.push( { 
            html: $(node).html(), 
            idx: $(node).data('orig') 
          } );
      });
});

// now re-arrange the deck chairs
$('table tr').each( function(i, tr) {
  // double each, once to capture and once to move                                          
  $(tr).children('td').each( function( idx, node) {
    temp[idx] = $(node).html();
  }).each( function(idx,node) {
    $(node).html( temp[ sorted[idx].idx ] );
  });
  temp = [];
});

Demo page

【讨论】:

  • 刚刚使用了这个解决方案,它对我来说非常有效。非常非常感谢!
【解决方案2】:

看看这个插件:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多