2012-02-16 26 views
5

Tôi có một bảng có một cột với các con số trải dài khoảng -10 đến 10 và một số cột trống.jquery tablesorter sắp xếp các ô trống trong ô cuối cùng

Tôi muốn bảng phân cách luôn đặt các cột trống ở cuối bảng. Ngay cả khi tôi sắp xếp tăng dần hoặc giảm dần.

Như thế này:

-1 
0 
2 
3 
<empty cell> 
<empty cell> 

hay như thế này:

3 
2 
0 
-1 
<empty cell> 
<empty cell> 

Lưu ý rằng vấn đề của tôi cũng giống như câu hỏi 4792426 ngoại trừ việc tôi muốn các ô trống ở phía dưới cả khi sắp xếp theo thứ tự được giảm dần và tăng dần.

Xóa các hàng không phải là một tùy chọn.

Trả lời

7

Tôi đã tìm ra cách để giải quyết vấn đề của mình.

Giải pháp do ssell cung cấp không hoạt động. Dữ liệu bảng được phân tích cú pháp chỉ một lần, vì vậy bạn không thể sử dụng một biến toàn cục để kiểm soát nó. Rất cố gắng nhưng! :-)

Đây là mã cần thiết. Như bạn thấy tôi quá tải các hàm formatFloat và formatInt sao cho chúng trả lại null thay vì giá trị mặc định: . Chức năng sắp xếp bên trong tablesorter làm phần còn lại kỳ diệu cho tôi.

 $(document).ready(function() { 
     $.tablesorter.formatInt = function (s) { 
      var i = parseInt(s); 
      return (isNaN(i)) ? null : i; 
     }; 
     $.tablesorter.formatFloat = function (s) { 
      var i = parseFloat(s); 
      return (isNaN(i)) ? null : i; 
     }; 
     $("#table").tablesorter(); 
    }); 

Theo như tôi biết giải pháp của tôi không có giấy tờ, nhưng nó hoạt động tốt.

+0

Vui mừng nó hoạt động! Xóa câu trả lời của tôi vì nó không hoạt động. – ssell

+3

Chỉ cần bạn biết, tôi đã chia một bản sao của [tablesorter trên github] (http://mottie.github.com/tablesorter/docs/) và trong phiên bản mới nhất, nó sẽ tự động sắp xếp các ô trống ở dưới cùng - [demo] (http://jsfiddle.net/Mottie/Z9wdn/13/) – Mottie

2

Với phiên bản mới hơn của plugin jQuery, bạn có thể thêm một loại sắp xếp khác trong tiêu đề để tự động đặt trống/rỗng hoặc chuỗi (nếu ví dụ bạn nhập "-" thay cho null) nơi bạn muốn (trên/dưới).

<th class="{'sorter': 'digit', 'string': 'bottom'}">Count</th> 

Đây là cách nhúng trực tiếp vào html/mẫu. Nhưng nếu bạn có tính nhất quán trong số đếm cột của mình, bạn có thể thực hiện nó trong hàm tableorter ban đầu.

$('table').tablesorter(
    headers: { 
     1: { sorter: "digit", empty : "top" }, 
     2: { sorter: "digit", string: "bottom"} 
    } 
) 

Dù bằng cách nào cũng hoạt động tốt nhưng về cơ bản buộc bạn đặt thứ k, v của đối tượng tiêu đề để ưu tiên phân loại theo cách thông thường.

Thông tin khác có thể được tìm thấy trong the tablesorter docs.

0

Nếu nó có thể giúp bất cứ ai, đây là cách tôi đã làm nó cho văn bản.

function emptyAtBottomTextSorter(a, b, direction, column, table) { 
    if (a == "") { 
     a = direction ? "ZZZZZ" : ""; 
    } 
    if (b == "") { 
     b = direction ? "ZZZZZ" : ""; 
    } 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
} 

$("#myTable").tablesorter({ 
    headers: { 
     1 : {'sorter' : 'text'} 
    }, 
    textSorter: { 
     1 : emptyAtBottomTextSorter 
    } 
}); 

Làm việc như của TableSorter v2.26.2

Các vấn đề liên quan