Edgard Leal

My personal blog hosted on Github using Jekyll

Home View on GitHub
22 January 2014
Logo do DataTables plugin jQuery

O DataTables é hoje uma dos plugin jQuery mas utilizado por resolver ordenamento e paginação de forma automática. Mas em qualquer ferramenta que tente fazer ordenamento sem reflection, ocorre um problema que é a identificação automática do tipo de dados da coluna ou lista ordenada.
Isto ser torna um problema no seguinte caso:

  • 01/02/2015
  • 02/01/2015
  • 03/12/2014
Na lista acima as datas estão ordenadas como "string".
Por padrão, o plugin do dataTables reconhece automáticamente os tipos "string", "numeric", e, "date" , mas todos em formato americano.

Para burlar este problema, é possível criar um tipo de dado extendendo a api do jQuery (Clique em Result para ver o resultado ):

<div class="container">
    <table cellpadding="0" cellspacing="0" border="0" class="dataTable" id="example">
        <thead>
            <tr>
                <th>Data</th>
                <th>Browser</th>
                <th>Platform(s)</th>
                <th>Engine version</th>
                <th>CSS grade</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>05/02/2010</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>11</td>
                <td>X</td>
            </tr>
            <tr>
                <td>15/01/2010</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>21</td>
                <td>X</td>
            </tr>
            <tr>
                <td>22/01/2010</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>-4</td>
                <td>X</td>
            </tr>
            <tr>
                <td>10/06/2013</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>4</td>
                <td>X</td>
            </tr>
            <tr>
                <td>25/12/2010</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>4</td>
                <td>X</td>
            </tr>
            <tr>
                <td>05/01/2010</td>
                <td>Internet Explorer 4.0</td>
                <td>Win 95+</td>
                <td>4</td>
                <td>X</td>
            </tr>
        </tbody>
    </table>
</div>
$(document).ready(function () {
    $.extend(jQuery.fn.dataTableExt.oSort, {
        "date-pt-pre": function (a) {
            var x;
            try {
                var dateA = a.trim().split("/");
                var day = parseInt(dateA[0], 10);
                var month = parseInt(dateA[1], 10);
                var year = parseInt(dateA[2], 10);
                var date = new Date(year, month - 1, day);
                console.log("convertendo a data: " + date);
                x = date.getTime();
            } catch (err) {
                x = new Date().getTime();
            }
            return x;
        },

            "date-pt-asc": function (a, b) {
            return a - b;
        },

            "date-pt-desc": function (a, b) {
            return b - a;
        }
    });


    $('#example').dataTable({
        "sPaginationType": "full_numbers",
            "aoColumns": [{
            "sType": "date-pt"
        },
        null,
        null, {
            "sType": "numeric"
        },
        null]
    });
});

Você pode testar o código acima no JsFiddle.



blog comments powered by Disqus