سؤال

أنا أستخدم jquery tolliblear. ولدي مشكلة بالترتيب الذي يتم فيه تطبيق المحللين على أعمدة الجدول. أضيف محلل مخصص للتعامل مع العملة في النموذج $ -3.33.

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

يبدو أن المشكلة هي أن محلل العملات المدمج لها الأسبقية على محللتي المخصصة. يمكنني وضع المحلل المحلل في كود tollerwer نفسه (قبل محلل العملات) ويعمل بشكل صحيح، لكن هذا ليس قابيلا جدا. لا يمكنني تحديد الفارس يدويا باستخدام شيء مثل:

headers: {
    3: { sorter: "fancyNumber" },
    11: { sorter: "fancyCurrency" }
}

نظرا لأن أعمدة الجدول يتم إنشاء ديناميكيا من مدخلات المستخدم. أعتقد أن خيارا واحدا هو تحديد فارز لاستخدام فئة CSS واستخدام بعض المسصل لتحديد فارز بشكل صريح هذا السؤال يقترح، لكنني أفضل التمسك بالكشف الديناميكي إن أمكن.

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

المحلول

الخيار الأول هو إعطاء الأعمدة التي لها تقدر العملة الفئة الإضافية "{" فارز ":" العملة "}". تأكد أيضا من ذلك، بما في ذلك البيانات الوصفية البرنامجية المسافة، والتي يدعمها TableDlow. هذا سوف يسحب في خيارات لكل عنصر ويقول صراحة tollerwer المتدرب كيفية فرز.

<link rel="stylesheet" href="/css/jquery/tablesorter/green/style.css" />
<script src="/js/jquery-1.3.2.js"></script>
<script src="/js/jquery.ui.core.js"></script>
<script src="/js/jquery.metadata.js"></script>
<script src="/js/jquery.tablesorter.js"></script>

<script>
    $(document).ready(function()
    {
    $("#table").tablesorter();
    }
    );
    </script>
</head>
<table id="table" class="tablesorter">
<thead>
  <tr>
    <th class="{'sorter':'currency'}">Currency</th>
    <th>Integer</th>
    <th>String</th>
  </tr>
</thead>
<tbody>
<tr>
  <td class="{'sorter':'currency'}">$3</td>
  <td>3</td>
  <td>three</td>
</tr>
<tr>
  <td class="{'sorter':'currency'}">-$3</td>
  <td>-3</td>
  <td>negative three</td>
</tr>
<tr>
  <td class="{'sorter':'currency'}">$1</td>
  <td>1</td>
  <td>one</td>
</tr>
</tbody>
</table>

أيضا، هناك خطأ في الوظيفة لتنسيق العملة: لا يتعامل مع الأرقام السالبة.

لقد قدمت أ حشرة, ، وأنا أعمل على الهبوط التصحيح.

الخيار الثاني هو تطبيق هذا الإصلاح على نسختك من Toldlower. بمجرد تطبيق الإصلاح، لن تحتاج إلى تحديد فارز العملة في TH أو TD (تحديد في TD's أكثر من قتل على أي حال).

تحرير الخط 724 من jquery.tablesorter.js:

عودة $ .tablesدر .formatfloat (s.replace (regexp جديد (/ [^ 0-9.] / g)، "")؛

التغيير إلى:

العودة $ .tablesدر .formatfloat (s.replace (regexp جديد (/ [^ - 0-9.] / g)، "")؛

قضية:

  • القيم: $ -3، 1 دولار، 3 دولارات

  • ترتيب ASC الحالي: $ 1، 3 دولارات، $ - 3

  • CASC طلب ASC $ -3، $ 1، 3 دولارات

قضية:

  • القيم: - 3 دولارات، $ 1، 3 دولارات

  • ترتيب ASC الحالي: $ 1، 3 دولارات، - $ 3

  • CASC طلب ASC $ -3، $ 1، 3 دولارات

نصائح أخرى

كان لدي مشكلة مماثلة واكتشفت textExtraction الخيار الذي يوصى به عند وجود خلاياك تحتوي على علامات. ومع ذلك، فإنه يعمل بشكل جيد بشكل جيد كتنسيق مسبق!

$('table').tablesorter({
  textExtraction: function(s) {
    var text = $(s).text();
    if (text.charAt(0) === '$') {
      return text.replace(/[^0-9-.]/g, '');
    } else {
      return text;
    }
  }
});

لقد استخدمت شيئا مثل هذا ويعمل من أجلي.

استخدم هذه الفئة في رأس <th class = "{" فارز ":" رقم "}"> وفي العمود <TD Class = "{" فارز ":" أرقام "}">.

بمجرد القيام به، قم بإجراء تغييرات في رمز JavaScript للحصول على كل العملة في شكل أرقام.

له، استمتع بالفرز!

هنا هو الرمز:

رأس:

  <th style='width: 98px;' class="{'sorter':'digit'}">
            Amount
   </th>

العمود (TD):

 <td align="left" style='width: 98px;' class="{'sorter':'digit'}">
            <%= Convert.ToDouble( a.AMOUNT ?? 0.0).ToString("C3") %>
 </td>

جافا سكريبت:

<script language="javascript" type="text/javascript">
  jQuery("#rewardtable").tablesorter({
    textExtraction: function (data) {
        var text = $(data).text();
        if (text.toString().indexOf("-$") != -1) {
            return ("-" + text.replace(new RegExp(/[^0-9.]/g), ""));
        }
        else if (text.toString().indexOf("$") != -1) {
            return (text.replace(new RegExp(/[^-0-9.]/g), ""));
        }
        else {
            return text;
        }
    }
  });

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