Флажок сортировать в DataTables с помощью jQuery

Я пытался отсортировать поле флажка в DataTables плагин jQuery для проверки и снятия флажка.

Я создаю вход (флажок) внутри таблицы следующим образом:

'<input type="checkbox" '+ check +' />'

check содержит текст "checked " или"".

до сих пор я пытался просто добавить тип флажка DOM, например:

{ "sSortDataType": "dom-checkbox" }

когда я использую весь код из плагина документация API, Я получаю следующее ошибка:

Uncaught TypeError: не удается прочитать свойство "afnSortData" неопределенного в моей консоли.


9 ответов


что я сделал: создания буль ВАР в скрытом П так и будет в sameplace как флажок.чем я отключил опцию Изменить значение в флажке, и сортировка теперь работает.


нашел этот пример:

$.fn.dataTableExt.afnSortData['dom-checkbox'] = function  ( oSettings, iColumn )
{
    var aData = [];
    $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
        aData.push( this.checked==true ? "1" : "0" );
    } );
    return aData;
}

инициализируется следующим образом:

$(document).ready(function() {
    $('#example').dataTable( {
        "aoColumns": [
            null,
            null,
            null,
            null,
            null,
            { "sSortDataType": "dom-checkbox" }
        ]
    } );
} );

здесь:http://www.datatables.net/examples/plug-ins/dom_sort.html


мне пришлось слегка подправить ответ, предоставленный Moby's Stunt Double. Дополнительный сортировочный плагин не требуется! Просто немного пользовательского кодирования.

Спасибо за все идеи, все! По какой-то причине мне пришлось делать специальную обработку для моего стола, что не было общим решением. Что меня вполне устраивало.

мой флажок был отключен и проверен программно, поэтому я не мог назвать .checked. Вызов на основе iColumn также сбросил вещи; вероятно, потому, что у меня был скрытый 0th колонна.

вот что сработало для меня:

$.fn.dataTableExt.afnSortData['dom-checkbox'] = function  ( oSettings, iColumn ) {
    var aData = [];
    $(oSettings.oApi._fnGetTrNodes(oSettings)).each( function () {
        var checker = $(this).find('.classOnSurroundingSpan input');
        aData.push( checker.prop("checked")==true ? "1" : "0" );
    } );
    return aData;
}

моя наценка выглядела так (окружающий промежуток был частью решения для включения отслеживания клик на checkbox инвалидов):

<span class='classOnSurroundingSpan'><input type='checkbox' disabled='disabled'/></span>

мое определение таблицы (в части):

"aoColumnDefs": [
    {"sSortDataType": "dom-checkbox",
    "aTargets":[1],
    "asSorting": ["desc"]}
]

это работает для меня:

$(document).ready(function() {
    $('#example').dataTable( {
        "aoColumns": [
            null,
            null,
            null,
            null,
            null,
            { "orderDataType": "dom-text", type: 'string' },
        ]
    } );
} );

нашел этот пример:

  $.fn.dataTable.ext.order['dom-checkbox'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('input', td)[1].checked ? '1' : '0';
    });
}

инициализируется следующим образом:

$(document).ready(function() {
    $('#example').dataTable( {
        "columnDefs": [
                        {
            "targets": 10,
                            "orderDataType": "dom-checkbox"
                        });
} );

Это решение сработало для меня, поэтому я написал на нем сообщение в блоге.

http://blog.josephmisiti.com/sorting-booleans-in-jquery-datatables


если у вас есть какой-то уникальный идентификатор на элементе checkbox, вы можете сделать что-то довольно чистое, как в этом примере ниже (обратите внимание, что это datatables плагин сортировки синтаксис)

если ваши входы выглядят так:

<input data-app-id="1" class="migrateCheck" type="checkbox">

плагин будет выглядеть так:

function checkboxCompare(a, b) {
    var aId = $(a).data('app-id'),
        bId = $(b).data('app-id'),
        aChecked = $('.migrateCheck[data-app-id=' + aId + ']:checked').length,
        bChecked = $('.migrateCheck[data-app-id=' + bId + ']:checked').length;

    if (aChecked && !bChecked) return -1;
    else if (!aChecked && bChecked) return 1;

    return 0;
}

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
    "checkbox-pre": function (a) {
        return a;
    },

    "checkbox-asc": function (a, b) {
        return checkboxCompare(a, b);
    },

    "checkbox-desc": function (a, b) {
        return checkboxCompare(b, a);
    }
});

потом просто указать sType: "checkbox" на aoColumnDefs attr для col, который содержит флажок.


это работает для меня

$(document).ready(function () {
    $('#Table').DataTable({
        "language": datatableLanguaje,
        "aoColumnDefs": [ 
            { "aTargets": [8], "orderDataType": "dom-text", type:'string' },
        ]
    });
});

все может быть Отсортировано по простому html.

$('#table input[type=checkbox]').each(function () {
    var text = $(this).prop('checked');
    var ele = $('<span>' + text + '</span>').hide();
    $(this).after(ele);
});