HTML5 UL LI Draggable

html drag and drop list items
html5 drag and drop
multiple drag and drop html5
bootstrap drag and drop list
html5 drag and drop grid
html5 drag and drop table columns
jquery drag and drop list
html5 drag and drop placeholder

I have an unordered list:

  • List item 1
  • List item 2
  • List item 3
  • List item 4
  • List item 5

Implemented with this code:

  <li>List item 1</li>
  <li>List item 2</li>
  <li>List item 3</li>
  <li>List item 4</li>
  <li>List item 5</li>

Now, I want it to be draggable. For example, if I drag "List item 5" upward, I can place it between "List item 2" and "List item 3", and it'll become third.

I want to do this without jQuery, just plain Javascript. Also, I'd like to use native HTML5 draggable="true". Any help would be appreciated.

Attribute "draggable" only enables the element for dragging. You need to implement the DnD listener and implement the drop event to make the changes you want.

You will find the same problem you want to solve in this example:

In the example they implement drag-drop for columns A, B and C. User can change the order by DnD.

Drag & Drop List Items, Drag & Drop List Items using html5 and vanilla JS <ul id="columns">. 2. <li class="column" draggable="true"><header>A</header></li>. 3. <li class="column "� The draggable attribute specifies whether an element is draggable or not. Tip: Links and images are draggable by default. Tip: The draggable attribute is often used in drag and drop operations. Read our HTML Drag and Drop tutorial to learn more.

Just add draggable="true" to your li-elements.

<ol ondragstart="">
<li draggable="true" data-value="data1">List Item 1</li>
<li draggable="true" data-value="data2">List Item 2</li>
<li draggable="true" data-value="data3">List Item 3</li>

HTML5 Drag and & Drop - Moving Elements Within a List, I am trying out HTML5 Drag and Drop Web API and trying to incorporate it into a simple To-Do App <ul id="list-items"> <li draggable="true"� HTML 5 comes with a separate attribute for define the element draggable or not, and with JS we can create a fully functional program for drag and drop. There I have used pure JavaScript , not any library or framework had used.

If you are testing with Firefox, note that it also requires some data be sent in the drag operation:

function handleDragStart(e) {
  e.dataTransfer.effectAllowed = 'move';

myLi.addEventListener('dragstart', handleDragStart, false);

Otherwise, you wouldn't see the ghost image of the content being dragged...

HTML Drag and Drop API, Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, Python, Bootstrap, Java� With HTML5, you can allow users to drag and drop Web page items. Using a combination of HTML markup and JavaScript, you can implement drag and drop operations natively in supporting browsers.

This code will solve your problem. Redone example with MDN Try it this


  <li class="dropzone" id='0' draggable="true">List item 1</li>
  <li class="dropzone" id='1' draggable="true">List item 2</li>
  <li class="dropzone" id='2' draggable="true">List item 3</li>
  <li class="dropzone" id='3' draggable="true">List item 4</li>
  <li class="dropzone" id='4' draggable="true">List item 5</li>

pure JS

let dragged;
let id;
let index;
let indexDrop;
let list;

  document.addEventListener("dragstart", ({target}) => {
      dragged = target;
      id =;
      list = target.parentNode.children;
      for(let i = 0; i < list.length; i += 1) {
        if(list[i] === dragged){
          index = i;

  document.addEventListener("dragover", (event) => {

  document.addEventListener("drop", ({target}) => {
   if(target.className == "dropzone" && !== id) {
       dragged.remove( dragged );
      for(let i = 0; i < list.length; i += 1) {
        if(list[i] === target){
          indexDrop = i;
      console.log(index, indexDrop);
      if(index > indexDrop) {
        target.before( dragged );
      } else {
       target.after( dragged );

Using the HTML5 Drag and Drop API, The HTML5 Drag and Drop (DnD) API means that we can make The source element can be an image, list, link, file object, block of HTML, etc. HTML5 DnD calls on Javascript, an event-based mechanism, and additional markups, to make it possible to drag nearly any element. Images, files, links, and even other DOM nodes are all examples of draggable elements. Example 5: Faster, More Responsive Apps.

<ul id="parent">

    <li class="parent">List item 1</li>

    <li class="parent">List item 2</li>

    <li class="parent">List item 3</li>

    <li class="parent">List item 4</li>

    <li class="parent">List item 5</li>

try this js

    var dragSrcEl = null;

    function handleDragStart(e) {
        // Target (this) element is the source node. = '0.4';

        dragSrcEl = this;

        e.dataTransfer.effectAllowed = 'move';
        e.dataTransfer.setData('text/html', this.innerHTML);

    function handleDragOver(e) {
        if (e.preventDefault) {
            e.preventDefault(); // Necessary. Allows us to drop.

        e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.

        return false;

    function handleDragEnter(e) {
        // this / is the current hover target.

    function handleDragLeave(e) {
        this.classList.remove('over');  // this / is previous target element.

    function handleDrop(e) {
        // this/ is current target element.

        if (e.stopPropagation) {
            e.stopPropagation(); // Stops some browsers from redirecting.

        // Don't do anything if dropping the same column we're dragging.
        if (dragSrcEl != this) {
            // Set the source column's HTML to the HTML of the column we dropped on.
            dragSrcEl.innerHTML = this.innerHTML;
            this.innerHTML = e.dataTransfer.getData('text/html');

        return false;

    function handleDragEnd(e) {
        // this/ is the source node.

        [], function (col) {

    var cols = document.querySelectorAll('#parent .parent');
    [], function (col) {
        col.addEventListener('dragstart', handleDragStart, false);
        col.addEventListener('dragenter', handleDragEnter, false)
        col.addEventListener('dragover', handleDragOver, false);
        col.addEventListener('dragleave', handleDragLeave, false);
        col.addEventListener('drop', handleDrop, false);
        col.addEventListener('dragend', handleDragEnd, false);

Sortable, Click on and drag an element to a new spot within the list, and the other items will adjust to fit. By default, sortable items share draggable properties. view source� Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, Python, Bootstrap, Java and XML.

draggable, The draggable global attribute is an enumerated attribute that indicates whether the element can be dragged, either with native browser� Definition and Usage The <ul> tag defines an unordered (bulleted) list. Use the <ul> tag together with the <li> tag to create unordered lists. Tip: Use CSS to style lists.

Building a Drag and Drop List, What goes into building a drag and drop component in 2019? There is an official HTML drag and drop API, it was introduced in the HTML5 standard and it comes with <li aria-roledescription="This is a draggable item. Browse other questions tagged javascript css html-lists listitem or ask your own question. The Overflow Blog Podcast – 25 Years of Java: the past to the present

Example: List Reorder w/Bubbling, //Get the list of li's in the lists and make them draggable var lis = Y.Node.all('#play ul li');� Teams. Q&A for Work. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information.

  • This only gives the appearance of a drag. It snaps back when you release the click.
  • Code only answers are often times considered low quality. You should consider adding a description of why and how this code solves the problem.