2011-07-08 25 views
6

Tôi đang sử dụng jQuery tablesorter plugin. Tôi biết cách tắt phân loại trên cột bằng cách sử dụng plugin jQuery Metadata:jQuery tablesorter: Làm thế nào để vô hiệu hóa phân loại trên một cột bằng cách sử dụng một lớp thay vì "inline JSON"?

<th class="{sorter: false}">Don't sort me</th> 

Nhưng tôi muốn làm điều này bằng cách đặt lớp, vì vậy tôi không phải sử dụng plugin bổ sung. Ngoài ra tôi nghĩ rằng tôi sẽ nhớ tên lớp dễ dàng hơn việc nhớ cú pháp JSON này. Làm cách nào tôi có thể làm điều tương tự bằng cú pháp này:

<th class="not-sortable">Don't sort me</th> 

Trả lời

11

Tôi nghĩ cách duy nhất để làm việc này là sửa đổi mã nguồn của plugin.

Tại jquery.tablesorter.js, Line 483:

function checkHeaderMetadata(cell) { 
    if (($.metadata) && ($(cell).metadata().sorter === false)) { 
     return true; 
    }; 
    return false; 
} 

Thay đổi mã này vào:

function checkHeaderMetadata(cell) { 
    if ((($.metadata) && ($(cell).metadata().sorter === false)) || $(cell).hasClass("not-sortable")) { 
     return true; 
    }; 
    return false; 
} 

Bây giờ chức năng checkHeaderMetadata cũng đang trở thành sự thật, nếu các tế bào có một lớp có tên not-sortable.

+0

cảm ơn tuyệt vời! – Andrew

17

Bạn không cần phải sửa đổi nguồn của plugin. Giả sử lớp th của bạn vì không sắp xếp được gọi là nosort:

function setupTablesorter() { 
    $('table.tablesorter').each(function (i, e) { 
     var myHeaders = {} 
     $(this).find('th.nosort').each(function (i, e) { 
      myHeaders[$(this).index()] = { sorter: false }; 
     }); 

     $(this).tablesorter({ widgets: ['zebra'], headers: myHeaders }); 
    });  
} 
15

Tôi đồng ý, inline JSON là lạ. Nếu bạn đang sử dụng bảng phân đoạn v2.3 trở lên, bạn thực sự có thể sử dụng vai trò dữ liệu để thực hiện tương tự - và không phải sử dụng plugin siêu dữ liệu:

<th data-sorter="false">...</th> 

Sạch hơn nhiều. Lưu ý, tuy nhiên, nó đòi hỏi jQuery.

Để biết thêm thông & một bản demo: http://mottie.github.io/tablesorter/docs/example-parsers-jquery-data.html

Tất cả là tốt nhất!

  • Bến
2

Tính đến phiên bản 2.0.x bạn có thể quyết định vào khởi động, trong đó cột để không loại.

Thêm thuộc tính được gọi là headers và bỏ qua cột mong muốn thuộc tính sorter với giá trị false. Đếm các cột bắt đầu tại 0.

jQuery('#element').tablesorter({ 
    headers: { 
     // first column 
     0: { 
      sorter: false 
     }, 
     // third column 
     2: { 
      sorter: false 
     } 
    } 
}); 

Ví dụ lấy từ docs.

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