JSFiddle - React, Tailwind, and code Playground
by Tom DeBerardine
HTML
<div id="sortable1-div">
<h5>Available Columns</h5>
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
</div>
<div id="middle-div"> <a href="#" class="arrow add">></a>
<br/>
<br /> <a href="#" class="arrow remove"><</a>
</div>
<div id="sortable2-div">
<h5>Selected Columns</h5>
<ul id="sortable2" class="connectedSortable">
<li class="ui-state-highlight">Item 1</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
</div>
CSS
#sortable1, #sortable2 {
border: 1px solid #ccc;
list-style-type: none;
margin: 0;
padding: 0 0 2.5em;
float: left;
margin-right: 10px;
}
#sortable1-div, #sortable2-div {
list-style-type: none;
margin: 0;
padding: 0 0 2.5em;
float: left;
margin-right: 10px;
width: 220px;
}
#sortable1 li, #sortable2 li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
#middle-div {
padding: 30px 25px 10px 10px;
float: left;
width: 30px;
}
a {
text-decoration: none;
}
.arrow {
padding: 10px;
border: 1px solid #ccc;
margin-bottom: 10px;
}
h5 {
margin: 0;
color: #666;
font-weight: 100;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
li {
background: white;
position:relative;
margin: 1em 0;
padding: 1em;
border: 2px solid gray;
list-style: none;
padding-left: 42px !important;
}
li .handle {
background: #f8f8f8;
position: absolute;
left: 0;
top: 0;
bottom: 0;
padding:8px;
}
.ui-selecting {
background: #eee;
}
.ui-selecting .handle {
background: #ddd;
}
.ui-selected {
background: #def;
}
.ui-selected .handle {
background: #cde;
}
JavaScript
$(function () {
$("#sortable1, #sortable2").sortable({
connectWith: ".connectedSortable"
}).sortable({
handle: ".handle"
})
.selectable({
filter: "li",
cancel: ".handle"
})
.find("li")
.addClass("ui-corner-all")
.prepend("<div class='handle'><span class='ui-icon ui-icon-carat-2-n-s'></span></div>");
$('.add').click(function (e) {
e.preventDefault();
$("#sortable1 .ui-selected").appendTo("#sortable2").removeClass('ui-selected').addClass('ui-selectee');
});
$('.remove').click(function (e) {
e.preventDefault();
$("#sortable2 .ui-selected").appendTo("#sortable1").removeClass('ui-selected').addClass('ui-selectee');
});
});