DataTables row.add à l'index spécifique

Je remplacer des articles en rangée comme celui-ci:

var $targetRow = $(entity.row), dataTable = $targetRow.closest('table.dataTable').DataTable(); dataTable.row($targetRow).remove(); dataTable.row.add({ foo: 1 }).draw(); 

J'ai une logique dans le rowCreated relié à la table, donc je recréé la ligne pour l'utiliser. Cela fonctionne bien. Mais row.add ajoute toujours la rangée régénérée en dernier dans la liste. Existe-t-il un moyen de l'insérer dans un index spécifique?

DataTables contient ses lignes dans un tableau indexé, et il n'y a aucune méthode API pour ajouter une nouvelle ligne à un index spécifique ou modifier l' index() d'une ligne.

Cela a du bon sens, car une table de données typique est toujours triée / commandée ou filtrée sur les données et non sur l'index statique. Et lorsque vous recevez des données d'un serveur ou que vous souhaitez transférer des données vers un serveur, vous n'utilisez jamais l' index() client statique index() .

Mais si vous en pensez, vous pouvez toujours réorganiser les lignes et insérez une ligne à un index spécifique très simple par code, simplement en réordonnant les données. Lorsqu'une nouvelle ligne est ajoutée, échangez les données de la dernière ligne (la ligne insérée) vers la deuxième dernière ligne, puis permettez les données de la deuxième dernière ligne vers la troisième dernière ligne et ainsi de suite jusqu'à ce que vous atteigniez l'index où vous voulez Pour insérer la rangée.

 [0][1][2][3][4->][<-newRow] [0][1][2][3->][<-newRow][4] [0][1][2->][<-newRow][3][4] 

Exemple, insérer une nouvelle ligne à l'index où la souris est cliquée:

 $("#example").on('click', 'tbody tr', function() { var currentPage = table.page(); //insert a test row count++; table.row.add([count, count, count, count, count]).draw(); //move added row to desired index (here the row we clicked on) var index = table.row(this).index(), rowCount = table.data().length-1, insertedRow = table.row(rowCount).data(), tempRow; for (var i=rowCount;i>index;i--) { tempRow = table.row(i-1).data(); table.row(i).data(tempRow); table.row(i-1).data(insertedRow); } //refresh the current page table.page(currentPage).draw(false); }); 

Demo -> http://jsfiddle.net/mLh08nyg/