I will start by reviewing some of the existing depraved alternatives:
So I wrote my own library in just these two file: dad.js and dad.css. Here are some examples using this library:
When dragging starts, this happens:
original = dad.whatToDrag(draggable);
dragging = original.cloneNode(true);
Most drag-and-drop tools drag the original by setting position to relative and moving it by setting left and top. But this breaks if the DOM is changed. So instead I clone the original and set position of the clone to fixed. This way, changing the DOM doesn't affect the location of what is being dragged.
Here is the source of this website. And here is a discussion thread if you want to comment.