This page contains documentation and tests for the TableDnD jQuery plug-in. For more information and to post comments, please go to isocra.com.
If you have issues or bug reports, then you can post them at the TableDnD plug page at plugins.jquery.com
Free jQuery Plugins, HTML5 and CSS3 Scripts - Providing tons of Jquery Plugins,Html5 and CSS3 Scripts for web developers to preview and download. By using these resources, you can create amazing effects with fancy animations of content elements like text, images and so on.
$(document).ready
function. Use a selector to select your table and then call tableDnD()
. You can optionally specify a set of properties (described below).1 | One | some text |
2 | Two | some text |
3 | Three | some text |
4 | Four | some text |
5 | Five | some text |
6 | Six | some text |
The HTML for the table is very straight forward (no Javascript, pure HTML):
<table id="table-1" cellspacing="0" cellpadding="2"> <tr id="1"><td>1</td><td>One</td><td>some text</td></tr> <tr id="2"><td>2</td><td>Two</td><td>some text</td></tr> <tr id="3"><td>3</td><td>Three</td><td>some text</td></tr> <tr id="4"><td>4</td><td>Four</td><td>some text</td></tr> <tr id="5"><td>5</td><td>Five</td><td>some text</td></tr> <tr id="6"><td>6</td><td>Six</td><td>some text</td></tr> </table>
To add in the "draggability" all we need to do is add a line to the $(document).ready(...)
function
as follows:
<script type="text/javascript"> $(document).ready(function() { // Initialise the table $("#table-1").tableDnD(); }); </script>
In the example above we're not setting any parameters at all so we get the default settings. There are a number of parameters you can set in order to control the look and feel of the table and also to add custom behaviour on drag or on drop. The parameters are specified as a map in the usual way and are described below:
onDragClass
.) The CSS style to apply is specified as
a map (as used in the jQuery css(...)
function).tDnD_whileDrag
. So to use the default, simply customise this CSS class in your
stylesheet.table.tBodies[0].rows
.This second table has has an onDrop function applied as well as an onDragClass. The javascript to set this up is as follows:
$(document).ready(function() { // Initialise the first table (as before) $("#table-1").tableDnD(); // Make a nice striped effect on the table $("#table-2 tr:even').addClass('alt')"); // Initialise the second table specifying a dragClass and an onDrop function that will display an alert $("#table-2").tableDnD({ onDragClass: "myDragClass", onDrop: function(table, row) { var rows = table.tBodies[0].rows; var debugStr = "Row dropped was "+row.id+". New order: "; for (var i=0; i<rows.length; i++) { debugStr += rows[i].id+" "; } $(#debugArea).html(debugStr); }, onDragStart: function(table, row) { $(#debugArea).html("Started dragging row "+row.id); } }); });
1 | One | |
2 | Two | |
3 | Three | |
4 | Four | |
5 | Five | |
6 | Six | |
7 | Seven | |
8 | Eight | |
9 | Nine | |
10 | Ten | |
11 | Eleven | |
12 | Twelve | |
13 | Thirteen | |
14 | Fourteen |
Generally once the user has dropped a row, you need to inform the server of the new order. To do this, we've
added a method called serialise()
. It takes no parameters but knows the current table from the
context. The method returns a string of the form tableId[]=rowId1&tableId[]=rowId2&tableId[]=rowId3...
You can then use this as part of an Ajax load.
This third table demonstrates calling the serialise function inside onDrop (as shown below). It also demonstrates the "nodrop" class on row 3 and "nodrag" class on row 5, so you can't pick up row 5 and you can't drop any row on row 3 (but you can drag it).
$('#table-3').tableDnD({ onDrop: function(table, row) { alert($.tableDnD.serialize()); } });
Drag and drop in this table to test out serialise and using JQuery.load()
1 | One | |
2 | Two | |
3 | Three (Can't drop on this row) | |
4 | Four | |
5 | Five (Can't drag this row) | |
6 | Six |
This table has multiple TBODYs. The functionality isn't quite working properly. You can only drag the rows inside their own TBODY, you can't drag them outside it. Now this might or might not be what you want, but unfortunately if you then drop a row outside its TBODY you get a Javascript error because inserting after a sibling doesn't work. This will be fixed in the next version. The header rows all have the classes "nodrop" and "nodrag" so that they can't be dragged or dropped on.
H1 | H2 | H3 |
---|---|---|
4.1 | One | |
4.2 | Two | |
4.3 | Three | |
4.4 | Four | |
4.5 | Five | |
4.6 | Six | |
H1 | H2 | H3 |
5.1 | One | |
5.2 | Two | |
5.3 | Three | |
5.4 | Four | |
5.5 | Five | |
5.6 | Six | |
H1 | H2 | H3 |
6.1 | One | |
6.2 | Two | |
6.3 | Three | |
6.4 | Four | |
6.5 | Five | |
6.6 | Six |
The following table demonstrates the use of the default regular expression. The rows have IDs of the
form table5-row-1, table5-row-2, etc., but the regular expression is /[^\-]*$/
(this is the same
as used in the NestedSortable plugin for consistency).
This removes everything before and including the last hyphen, so the serialised string just has 1, 2, 3 etc.
You can replace the regular expression by setting the serializeRegexp
option, you can also just set it
to null to stop this behaviour.
$('#table-5').tableDnD({ onDrop: function(table, row) { alert($.tableDnD.serialize()); }, dragHandle: ".dragHandle" });
1 | One | some text | |
2 | Two | some text | |
3 | Three | some text | |
4 | Four | some text | |
5 | Five | some text | |
6 | Six | some text |
In fact you will notice that I have also set the dragHandle on this table. This has two effects: firstly only
the cell with the drag handle class is draggable and secondly it doesn't automatically add the cursor: move
style to the row (or the drag handle cell), so you are responsible for setting up the style as you see fit.
Here I've actually added an extra effect which adds a background image to the first cell in the row whenever
you enter it using the jQuery hover
function as follows:
$("#table-5 tr").hover(function() { $(this.cells[0]).addClass('showDragHandle'); }, function() { $(this.cells[0]).removeClass('showDragHandle'); });
This provides a better visualisation of what you can do to the row and where you need to go to drag it (I hope).
0.2 | 2008-02-20 | First public release |
0.3 | 2008-02-27 | Added onDragStart option Made the scroll amount configurable (default is 5 as before) |
0.4 | 2008-03-28 | Fixed the scrollAmount so that if you set this to zero then it switches off this functionality Fixed the auto-scrolling in IE6 thanks to Phil Changed the NoDrop attribute to the class "nodrop" (so any row with this class won't allow dropping) Changed the NoDrag attribute to the class "nodrag" (so any row with this class can't be dragged) Added support for multiple TBODYs--though it's still not perfect Added onAllowDrop to allow the developer to customise this behaviour Added a serialize() method to return the order of the rows in a form suitable for POSTing back to the server |
0.5 | 2008-06-04 | Changed so that if you specify a dragHandle class it doesn't make the whole row draggable Improved the serialize method to use a default (and settable) regular expression. Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table |