tablesorter(jQuery) - 如何在这里为我的需求创建自定义排序器

时间:2011-10-11 00:43:52

标签: jquery tablesorter

jQuery tablesorter插件对于一个特定的情况并不是很好。基本上,我只想在文本“无”和“任何人”之间进行排序......但我无法弄清楚如何做到(甚至在哪里开始,真的......)。

第3列充满了许多不同的可能性,但我想要做的很简单:

  1. 当单元格包含文本时,“无”
  2. 当单元格中包含ANYTHING ELSE时....
  3. 提前致谢。

    现在,通话看起来像这样:

    $(document).ready( function () {
                // TableSorter
                    $("#dt-results") 
                    .tablesorter({
                                    widgets: ['zebra'], 
                                    sortList: [[0,1]],
                                    headers: { 
                                        1: { 
                                            sorter:'currency' 
                                        }
                                    }, 
    
                                    textExtraction: function(node) {
                                        return $(node).text();
                                    }
    
                    })
                    .tablesorterPager({container: $("#pager")})
                    .tablesorterFilter({filterContainer: $("#filter-box"),
                                  filterClearContainer: $("#filter-clear-button"),
                                  filterCaseSensitive: false,
                                  filterWaitTime: 10});
            });
    

1 个答案:

答案 0 :(得分:1)

查看更新的代码:http://jsfiddle.net/L4PFn/9/

你当然可以使代码更清洁。 但是现在逻辑是.. textExtraction: function(node)为你提供了列的html /内容,你需要返回将用于排序的文本。

因此,第一步是如何识别当前的textextraction位于用户列。为此,您可以对用户列的内容使用唯一的class属性。 在我的例子中,我添加了usercol作为该类

<div class="outer usercol">
  <div class="inner">
     <div style="line-height:12px; margin-bottom:10px;">Bobb Johnson<br>&nbsp;&nbsp;&nbsp;<em>STATUS</em><br>
     </div>
  </div>
</div>

<div class="outer usercol">None</div>

并在textExtraction添加

if($(node.innerHTML).hasClass('outer') && $(node.innerHTML).hasClass('usercol') ){
}

if语句告诉我们,我们位于用户列

下一步是检查当前列的内容是否为“无”。如果'无'则返回'z'或'a',因为这将确保'none'在排序时位于顶部或底部

if($.trim($(node).text()) == 'None'){
  return 'z'; //so that none comes last
}

否则您可以返回$(node).text();或更好的方法是深入查看name。 您可以在范围中添加名称,为其指定唯一的类名,然后返回$(node.innerHTML).find('span.unique-class-name').text()