web-dev-qa-db-fra.com

jQuery DataTables. Comment obtenir des lignes filtrées (visibles)

J'ai un bouton qui applique un filtre à jquery datatable

$("#buttonFilter").button().click(function() {
                if (lboxColor.val() != null) {
                    jqTable.fnFilter($("option:selected", lboxColor).text(), 1);
                }
            });

Il me montre par exemple 47 lignes sur 60. J'ai essayé .fnGetData () et fnGetNodes () mais il affiche toutes les lignes, mais pas filtré. Comment pourrais-je obtenir 47 lignes?

17
Yuri

Je cherche depuis environ une heure, si vous souhaitez utiliser DataTables 1.10+ si vous souhaitez obtenir les lignes filtrées (meilleur terme: "recherché"):

var table = $('.table').DataTable({...});

function selectOnlyFiltered(){
   var filteredRows = table.rows({filter: 'applied'});
}
23
Jack

Pour les tables de données 1.9 et ultérieures, cette solution fonctionne:

myDataTableHandle = $('#example1').dataTable(...);
...
...
var myFilteredRows = myDataTableHandle._('tr', {"filter":"applied"});

et vous n'aurez pas à inclure un plugin api séparé. :)

17
RayLoveless

Juste au cas où vous voudriez une collection de noeuds (éléments DOM) exactement comme fngetNodes (), vous pouvez utiliser le '$' au lieu du '_' comme ceci table.$('tr', {"filter":"applied"});

le '_' renvoie une collection de 'TR' (éléments HTML).

6
Bedouin

Pour ceux qui sont intéressés, il s’agit d’un cas concret. 

/**
 * Select all the elements of the datatable which match the current user
 * search (or all if no search).
 */
function dtable_selectAll()
{
    idTable = 'myDataTable';
    var rows = $('#' + idTable).dataTable()
            .$('tr', {"filter":"applied"});
    var oTT = TableTools.fnGetInstance(idTable);
    $(rows).each(function (index, el){
        oTT.fnSelect(el);
    })
}

J'espère que ça aide.

0
Moebius