1

我有这样的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;                
        });            
    });
  });
});

但主要问题是它正在对所有内容进行排序......但我只需要那个,它会在我的 tr 之后使用id 123123并在页面加载时排序......

我需要通过我的浮点​​数进行排序,它只在第二个 div 中!在 id = 123 的 tr 中,这很重要...而且我在 web 中看到的所有解决方案都非常庞大...我只需要在具有特定 id 的某些 tr 中进行简单的排序第二个 td ...我该如何解决?

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

也在这里尝试#2: 链接

第一排还有麻烦...

4

1 回答 1

0

很难准确地说出你想要从你的英语中得到什么,但这是我想出的:

  1. 查找所有表。
  2. 对于每个表:
    1. 找到标有 class 的标题单元格prcol。那是我们要排序的列。
    2. 查找tbody表中标有sortable类的所有标签。
    3. 对于每个可排序的主体:
      1. 根据可排序单元格的浮点值对行进行排序
      2. 用已排序的行替换旧行

为了完成这项工作,我将以下内容放入 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);
    });
});​

做了一个小提琴,显示了工作中的代码。我对表格做了很多简化,以便更容易看到正在发生的事情,并且我对第三个表格主体进行了未排序。

于 2012-11-14T23:42:51.120 回答