This example shows how full row editing can be achieved with DataTables in a manner which can be readily customised. Please see the blog post describing this example for further information.
Rendering engine | Browser | Platform(s) | Engine version | CSS grade | Edit | Delete |
---|---|---|---|---|---|---|
Trident | Internet Explorer 4.0 | Win 95+ | 4 | X | Edit | Delete |
Trident | Internet Explorer 5.0 | Win 95+ | 5 | C | Edit | Delete |
Trident | Internet Explorer 5.5 | Win 95+ | 5.5 | A | Edit | Delete |
function restoreRow ( oTable, nRow ) { var aData = oTable.fnGetData(nRow); var jqTds = $('>td', nRow); for ( var i=0, iLen=jqTds.length ; i<iLen ; i++ ) { oTable.fnUpdate( aData[i], nRow, i, false ); } oTable.fnDraw(); } function editRow ( oTable, nRow ) { var aData = oTable.fnGetData(nRow); var jqTds = $('>td', nRow); jqTds[0].innerHTML = '<input type="text" value="'+aData[0]+'">'; jqTds[1].innerHTML = '<input type="text" value="'+aData[1]+'">'; jqTds[2].innerHTML = '<input type="text" value="'+aData[2]+'">'; jqTds[3].innerHTML = '<input type="text" value="'+aData[3]+'">'; jqTds[4].innerHTML = '<input type="text" value="'+aData[4]+'">'; jqTds[5].innerHTML = '<a class="edit" href="">Save</a>'; } function saveRow ( oTable, nRow ) { var jqInputs = $('input', nRow); oTable.fnUpdate( jqInputs[0].value, nRow, 0, false ); oTable.fnUpdate( jqInputs[1].value, nRow, 1, false ); oTable.fnUpdate( jqInputs[2].value, nRow, 2, false ); oTable.fnUpdate( jqInputs[3].value, nRow, 3, false ); oTable.fnUpdate( jqInputs[4].value, nRow, 4, false ); oTable.fnUpdate( '<a class="edit" href="">Edit</a>', nRow, 5, false ); oTable.fnDraw(); } $(document).ready(function() { var oTable = $('#example').dataTable(); var nEditing = null; $('#new').click( function (e) { e.preventDefault(); var aiNew = oTable.fnAddData( [ '', '', '', '', '', '<a class="edit" href="">Edit</a>', '<a class="delete" href="">Delete</a>' ] ); var nRow = oTable.fnGetNodes( aiNew[0] ); editRow( oTable, nRow ); nEditing = nRow; } ); $('#example a.delete').live('click', function (e) { e.preventDefault(); var nRow = $(this).parents('tr')[0]; oTable.fnDeleteRow( nRow ); } ); $('#example a.edit').live('click', function (e) { e.preventDefault(); /* Get the row as a parent of the link that was clicked on */ var nRow = $(this).parents('tr')[0]; if ( nEditing !== null && nEditing != nRow ) { /* Currently editing - but not this row - restore the old before continuing to edit mode */ restoreRow( oTable, nEditing ); editRow( oTable, nRow ); nEditing = nRow; } else if ( nEditing == nRow && this.innerHTML == "Save" ) { /* Editing this row and want to save it */ saveRow( oTable, nEditing ); nEditing = null; } else { /* No edit in progress - let's start one */ editRow( oTable, nRow ); nEditing = nRow; } } ); } );