سؤال

أنا أستخدم البرنامج المساعد jquery tablesorter لفرز جدول.يعرض أحد الأعمدة الموجودة في جدولي التاريخ بتنسيق mm/yy.

<tr>
    <td class="col-name">...</td>
    ...
    <td rel="2000" class="col-dob">10/00</td>
    ...
</tr>
<tr>
    <td class="col-name">...</td>
    ...
    <td rel="1986" class="col-dob">11/86</td>
    ...
</tr>

ملحوظة:

  • كل خلية لديها فئة فريدة من نوعها
  • يتم عرض التاريخ بتنسيق mm/yy
  • الخلية التي تحتوي على التاريخ تستقبل السنة أيضًا

رمز jQuery الخاص بي هو كما يلي:

// add parser through the tablesorter addParser method
$.tablesorter.addParser({
        // set a unique id
        id: 'user-birthdate',
        is: function(s) {
                // return false so this parser is not auto detected
                return false;
        },
        format: function(s) {
                // format your data for normalization

                var dateSplit = s.split('/');

                if(2 !== dateSplit.length)
                        return 0;

                return new Date(dateSplit[1], dateSplit[0], 1);
        },
        // set type, either numeric or text
        type: 'numeric'
});

myClass.init = function() {
        $('.module .user table').tablesorter({
                sortList: [[0,0]],     
             widgets: ['zebra'],
                headers: {
                        5: {
                                sorter:'user-birthdate'
                        }
                }
        });
}

myClass.init();

مشكلتي هي أن tableSorter يفسر 00 على أنه عام 1900 بدلاً من 2000 وبالتالي فإن البيانات التي تم فرزها غير صحيحة.

أي فكرة كيف يمكنني حل هذا؟أنا أستخدم jQuery 1.2.6 وأحدث إصدار من Tablesorter.

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

المحلول

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

في هذه الحالة، لا يخبرك بتوقيع الوظيفة للمحلل اللغوي.لحسن الحظ، يمكنك القراءة الرمز غير المصغر للعثور عليه.

وهناك نجد أن metadata المحلل يفعل هذا:

format: function(s,table,cell) {

هذا يعني أنه يمكنك ضبط طريقة التنسيق الخاصة بك من أجل:

format: function(s, table, cell) {
    // format your data for normalization

    var dateSplit = s.split('/');
    var year = $(cell).attr('rel');

    if(2 !== dateSplit.length)
        return 0;

    return new Date(year, dateSplit[0], 1);
},

أو على الأقل مشابه لذلك.لم أختبر هذا في الواقع.ولكن يجب أن تكون قريبة جدًا على الأقل.

نصائح أخرى

أعتقد أنك ستجد أن مشكلتك تكمن في مُنشئ التاريخ وسلسلة السنة المكونة من رقمين التي تمر بها دون توضيح: new Date(dateSplit[1], dateSplit[0], 1);

لا أعتقد أنه يمكنك (بسهولة) الوصول إلى rel بناءً على s في المحلل اللغوي.هل تحتوي على محتويات الخلية بالكامل؟هل يمكنك فعل شيء ما في البيانات الموجودة في الخلية مثل: <span style="display : none">CC</span>MM/YY, ، قم بإزالة العلامات ثم قم بدمج CC مع YY في التحليل الخاص بك؟

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