سؤال

ها هي مشكلتي،

أستخدم حاليًا JQuery Table Sorter ووجدت محللًا لأرقام الفاصلة على الويب.المشكلة التي أواجهها هي أنه لا يبدو أنه يعمل.

إذن هذا هو ما تم فرز العمود على النحو التالي:

  1. 4,666
  2. 141,666
  3. 293
  4. 341,666
  5. 346
  6. 461,676

وينبغي فرز هذا كما

  1. 293
  2. 346
  3. 4,666
  4. 141,666
  5. 341,666
  6. 461,676

المحلل اللغوي الذي أستخدمه هو هذا:

$( function() { 

    $.tablesorter.addParser({
        id: "fancyNumber",
        is: function(s) {
            return /^[0-9]?[0-9,\.]*$/.test(s);
        },
        format: function(s) {
            return $.tablesorter.formatFloat(s.replace(/,/g, ''));
        },
        type: "numeric"
    });
}); 

أنا فقط لا أعرف أنني أفعل الخطأ.هل أقوم بتحميله بشكل خاطئ؟هل المحلل خاطئ؟أحتاج إلى مساعدة حقيقية هنا وأعاني من هذه المشكلة منذ فترة.

يحرر: نظرًا لكيفية إنشاء أعمدتي والأعمدة المسموح للمستخدم باختيارها، لن أعرف أبدًا أي رأس موجود أم لا.لقد حاولت استخدام الفئة = "{sorter:الأمر 'fancyNumber'}" كما هو مذكور هنا: http://tablesorter.com/docs/example-meta-parsers.html

**تعديل:**يبدو أن أحد الأعمدة يعمل بشكل صحيح، ولكن هذا العمود لا يزال يواجه مشاكل.ربما لأنه يحتوي على أرقام وأرقام مفصولة بفواصل؟

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

المحلول

لكل من يأتي عبر هذا السؤال.اضطررت إلى إضافة الفصل إلى صف الرأس الخاص بي.لذا، بالنسبة لأي رأس أرغب في فرزه، أضفت هذا الفصل:

<th class=\"{sorter: 'fancyNumber'}\">

أدى هذا إلى تشغيل فارز بشكل افتراضي مما جعله يعمل بشكل جيد.

ما جعلني أدرك خطأي في طرقي هو تشغيل مصحح الأخطاء بهذه الطريقة.

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });

نصائح أخرى

يمكن أن يحدث هذا أيضًا إذا نسيت تضمين المكون الإضافي للبيانات الوصفية

** تم النشر هنا لأن هذه كانت نتيجة البحث الأولى على Google.

هنا ما قمت به:

$(document).ready(function() {
      $.tablesorter.addParser({
        id: 'fancyNumber',
        is:function(s){return false;},
        format: function(s) {return s.replace(/[\,\.]/g,'');},
        type: 'numeric'
    });
    $("table").tablesorter({headers: {0: {sorter: 'fancyNumber'}}});
});

عملت مع فاصلة ونقطة.

قم بتجريبه http://jsbin.com/equci5

لقد وجدت الحل الذي نجح بالنسبة لي.في tablesorter.js، قم بتعديل الملف فورماتفلوات () وظيفة على النحو التالي:

this.formatFloat = function (s) {
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

سيؤدي هذا إلى استبدال الفواصل التي كانت تتداخل مع الفرز.وجدت الجواب هنا.أتمنى أن يساعدك هذا...!

حاول تعيين المحلل اللغوي بشكل صريح في تعريف ‎.tablesorter()‎.

.tablesorter( { headers: { 0: { sorter:'fancyNumber' } }); 

انظر المصدر

كما ذكر جاريد، تحتاج إلى تحديد العمود الذي يستخدم المحلل اللغوي، إذا كنت لا تعرف فهرس العمود، فيمكنك العثور عليه باستخدام هذا:

var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}

$("table").tablesorter({headers:headers})

سأجرب هذا التعبير العادي:/(\د{1,3})?(\,\d{3})*/

ينظر المحللون فقط إلى صف tbody الأول لاكتشاف المحلل اللغوي الذي سيتم استخدامه.أعتقد أن صفك الأول لا يحتوي على أي فواصل.لقد واجهت نفس المشكلة، وأخيرًا أجبرت المحلل اللغوي الذي أردته، باستخدام class = "{sorter:'fancyNumber'}"

أنت على حق تمامًا في أن المحلل اللغوي يجب أن يعمل، والسبب في ذلك هو وجود خطأ في البرنامج المساعد.باختصار، يعتقد البرنامج المساعد أنه يمكنه فرز الأرقام التي تحتوي على فواصل بشكل صحيح، ولذلك يستخدم فارزًا مدمجًا، لكنه يفشل بعد ذلك في فرزها بشكل صحيح.

هناك عدة طرق لإصلاحها.

أولاً، يمكنك (كما اقترحت أعلاه) فرض استخدام وظيفة الفرز الخاصة بك (إما في أو في جافا سكريبت عند تهيئة المكون الإضافي).

ثانيًا، يمكنك تحرير المكون الإضافي لاستخدام وظائفك بدلاً من الوظائف الخاصة بك، ويمكن تحقيق ذلك عن طريق عكس اتجاه حلقة for في السطر 220 من المكون الإضافي.

ثالثًا، يمكنك إصلاح سلوك الفرز الافتراضي المعطل عن طريق تعديل إما وظيفة اكتشاف الأرقام لعدم قبول الفواصل (السطر 861 من البرنامج الإضافي) أو عن طريق تعديل فارز الأرقام الافتراضي للتعامل مع الفواصل (السطر 852 من البرنامج المساعد).

لقد أثرت هذه المشكلة على صفحة رموز google الخاصة بـ tablesorter: http://code.google.com/p/tablesorter/issues/detail?id=6

لقد وجدت الحل الذي نجح بالنسبة لي.في tablesorter.js، قم بتعديل الدالة formatFloat() كما يلي:

this.formatFloat = function (s) {
            s = s.toString();
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

سيؤدي هذا إلى استبدال الفواصل التي كانت تتداخل مع الفرز.وجدت الجواب هنا.أتمنى أن يساعدك هذا...!

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