在一些tr之后用jquery对表进行排序

时间:2012-11-14 10:10:26

标签: jquery html ruby-on-rails jquery-ui-sortable

我有这样的html表结构:

<table cellpadding="0" cellspasing="0" class="tablesorter zebra" id="articles-table">

    <tbody>...etc standart stuff...
    <tr>
    <td>
    </td>
    </tr>
    then i have 
    <tr id="123123">
    <td colspan="7">
     Analogs
    </td>
    </tr>
    <tr id="prcol">
    <td>
    <td>
</td>
</td>
<tr>
...
</table> 

我试过这样的剧本:

jQuery(function($) {
var table = $('table');
$(document).ready(function () {    
    $('#prcol')
    .each(function(){        
        var th = $(this),
            thIndex = th.index(),
            inverse = false;        
        th.click(function(){            
            table.find('td').filter(function(){                
                return $(this).index() === thIndex;                
            }).sortElements(function(a, b){                
                return $.text([a]) > $.text([b]) ?
                    inverse ? -1 : 1
                    : inverse ? 1 : -1;                
            }, function(){
                return this.parentNode; 
            });
            inverse = !inverse;                
        });            
    });
  });
});

但主要的麻烦在于它正在排序所有...但我只需要那个,用id 123123跟在我的tr之后并在页面加载时排序......

我需要通过我的浮点​​数排序,这只是在第二个div中!在id = 123的tr中,这很重要...我在网上看到的所有解决方案都是巨大的...我只需要在某些特定id中使用简单排序第二个td ...我该如何解决?

我试过tablesorter.com。但它不是我的...不能只为某些tr定制它...如果文件被加载我也需要它作为分类器。

在这里尝试#2: link

第一排是麻烦......

1 个答案:

答案 0 :(得分:0)

很难准确地说出你想要的英语,但这就是我想出的:

  1. 查找所有表格。
  2. 每张桌子:
    1. 找到标有类prcol的标题单元格。这是我们要排序的列。
    2. 查找标有tbody类的表格中的所有sortable标记。
    3. 对于每个可排序的机构:
      1. 根据可排序单元格的浮点值对行进行排序
      2. 将旧行替换为已排序的行
  3. 为了完成这项工作,我将以下内容放入jQuery的文档就绪事件中:

    $("thead .prcol").each(function(thIdx, sortElem) {
        // find our column index
        var index = $.inArray(sortElem, $(sortElem).closest('tr').children());
        var colSelector = "td:eq(_n_)".replace('_n_', index);
    
        $(sortElem).closest('table').children('tbody.sortable').each(function(tbIdx) {
            var rows = $(this).children('tr');
            rows.sort(function(left, right) {
                var leftText = $(colSelector, left).text();
                var rightText = $(colSelector, right).text();
                var leftValue = parseFloat(leftText) || 10000;
                var rightValue = parseFloat(rightText) || 10000;
                return  leftValue - rightValue;
            });
            $(this).html(rows);
        });
    });​
    

    made a fiddle 显示正在运行的代码。我简化了表格,以便更容易看到发生了什么,并且我将第三个表格主体取消了。