كيفية الحصول على ترتيب الفرز الحالي من البرنامج المساعد TableorTer؟

StackOverflow https://stackoverflow.com/questions/1955980

سؤال

لقد بدأت للتو في استخدام المكون الإضافي لـ Christian Bach's TableSorter ، وأحتاج إلى الحصول على اتجاه الفرز الحالي للعمود. لدي عدة أعمدة:

  • بطاقة تعريف
  • اسم
  • فئة

يتم تعيين المعرف والاسم على غير قابل للورم باستخدام

headers:    { 0: {sorter: false}, 1: {sorter: false} }

أقوم بإضافة معالج نقرة على الاسم بحيث يطلق الحدث الفرز على عمود الفئة. باستخدام المثال "فرز الجدول باستخدام رابط خارج الجدول"، أنا قادر على الحصول على رأس الاسم لإطلاق نوع الفئة-ولكن من الصعب ترميزه في اتجاه واحد.

كيف يمكنني الحصول عليها للنظر في الاتجاه الحالي ، يتم فرز عمود الفئة حاليًا ، وفرز في الاتجاه المعاكس؟ (يمكنني التعامل مع تقليب القيم ؛ نظرًا لأن ترتيب الفرز هو 0 أو 1 ، يمكنني xor القيمة للحصول على العكس ، مثل var sort; sort ^= sort; - سؤالي هو كيفية الحصول على القيمة الحالية.

إليك الرمز الذي يقوم حاليًا بتعيين معالج النقر على عمود الاسم:

$("#nameCol").click(function() {
    var sorting = [[2, 0]];     /* sort 3rd col (Category) descending */
    $("#SearchResults").trigger("sorton", [sorting] );  /* SearchResults is the ID of the sortable table */
    return false;               /* cancel default link action on a#nameCol */
});

شكرًا!

هل كانت مفيدة؟

المحلول

يجب أن تتصل رؤوس الجدول بالحدث نفسه:

$('th').click(function() {
     handleHeaderClick(this);
});  

ثم انقر فوق معالج يجب إضافة/إزالة الفئات المعمول بها.

function handleHeaderClick(hdr) {
    if ($(hdr).hasClass('headerSortDown') == true) {
        $(hdr).removeClass('headerSortDown');
        $(hdr).addClass('headerSortUp');
    } else if ($(hdr).hasClass('headerSortUp') == true) {
        $(hdr).removeClass('headerSortUp');
        $(hdr).addClass('headerSortDown');
    } else {
        $('th', myTable).removeClass('headerSortUp headerSortDown');
        $(hdr).addClass('headerSortDown');
    }
    doSomething();
};

آمل أن يساعد هذا.

نصائح أخرى

يمكنك استخدام المدمج في sortEnd حدث للحصول على sortorder كما هو موضح هنا: https://stackoverflow.com/a/4150187/363155

$('#yourtableId').on('sortEnd', function(event) {
    // Prints the current sort order to the console
    console.log(event.target.config.sortList);
});

يمكنك أيضًا التقاطها في الخارج ، في أي مكان آخر (على سبيل المثال في وظيفتك ، وبدء Ajax ، ..) ، وفقط عند الحاجة وليس على كل نقرة ، مع وجود أقل قليلاً مثل هذا:

lastSortList=$("#mytable")[0].config.sortList;

ومثال لفرزه مرة أخرى بعد تحديث Ajax:

$("#mytable").trigger("sorton", [lastSortList]);

تذكر أن تعلن الخط الأول في النطاق الصحيح.

كتبت وظيفة لحفظ ترتيب الفرز الحالي. ساعدني ذلك في موقف تم فيه إعادة بناء الطاولة من الصفر.

function SaveSortOrder(tablename) {
//returns an array of a tablesorter sort order
var hdrorder = new Array();
var hdrs = $("#" + tablename + " th");
var arrayindex = 0;
hdrs.each(function (index) {
    if ($(this).hasClass('headerSortDown')) {
        hdrorder[arrayindex] = [index, 0];
        arrayindex++;
    }
    else if ($(this).hasClass('headerSortUp')) {
        hdrorder[arrayindex] = [index, 1];
        arrayindex++;
    }       
});

return hdrorder;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top