Istnieje wiele odpowiedzi na temat korzystania z interfejsu jQuery do przeciągania i upuszczania, większość z nich jest przestarzała i ma wiele lat. Jaka jest najlepsza wtyczka w 2016 roku do implementacji Drag n Drop dla wiersza tabeli z jQuery (bez jQuery UI)?Przeciąganie i upuszczanie wierszy tabeli JS bez interfejsu użytkownika Jquery w 2016 roku
5
A
Odpowiedz
9
Dzień dobry, Yongke Yu! Wypróbuj bibliotekę autorstwa Konstanin Levedev - "Sortable» (~ 6KB). W NPM - "sortablejs". Ta biblioteka jest bardzo elastyczna, bez zależności, z obsługą dotykową, z możliwością dodawania elementów w locie.
Zrobiłem dla ciebie demo. Spróbuj dodać i usunąć wiersze i zmienić ich kolejność.
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS table row drag and drop without Jquery UI in 2016</title>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="http://rubaxa.github.io/Sortable/Sortable.js"></script>
</head>
<body>
<div class="recipe">
<div class="recipe__info">
<h2 class="recipe__title">Banana muffins recipe</h2>
<p>These healthy muffins are the perfect treat for when you are feeling something sweet. It is so much better to bake muffins yourself as you can choose exactly what you put in them, meaning you can stay away from refined sugars and preservatives! These are perfect for bringing to a brunch or just sharing with your friends.
</p>
</div>
<div class="recipe__ingredients">
<table cellpadding="0" cellspacing="0" border="0" class="recipe-table" id="recipeTable">
<tbody id="recipeTableBody">
<tr>
<td class="drag-handler"></td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="Large bananas" placeholder="Ingredient">
</td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="3" placeholder="Value">
</td>
<td class="recipe-table__cell">
<button class="recipe-table__del-row-btn">x</button>
</td>
</tr>
<tr>
<td class="drag-handler"></td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="White sugar" placeholder="Ingredient">
</td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="¹⁄₂" placeholder="Value">
</td>
<td class="recipe-table__cell">
<button class="recipe-table__del-row-btn">x</button>
</td>
</tr>
<tr>
<td class="drag-handler"></td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="Egg" placeholder="Ingredient">
</td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="1" placeholder="Value">
</td>
<td class="recipe-table__cell">
<button class="recipe-table__del-row-btn">x</button>
</td>
</tr>
</tbody>
</table>
<div class="recipe-table__add-row">
<span class="recipe-table__add-row-btn">+</span>
</div>
</div>
</div>
<script id="rowTemplate" type="text/template">
<tr>
<td class="drag-handler"></td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="" placeholder="Ingredient">
</td>
<td class="recipe-table__cell">
<input type="text" class="recipe__text-field" value="" placeholder="Value">
</td>
<td class="recipe-table__cell">
<button class="recipe-table__del-row-btn">x</button>
</td>
</tr>
</script>
</body>
</html>
CSS:
body {
font-size: 14px;
}
.recipe {
padding: 1em;
}
.recipe__title {
margin-top: 0;
}
.recipe__info {
vertical-align: top;
text-align: right;
padding: 0 1em 0 0;
margin: 0 1.3em 0 0;
font-weight: bold;
color: #454545;
border-right: 1px dotted #EEE;
width: 300px;
float: left;
}
.recipe__ingredients {
float: left;
}
.recipe-table {
position: relative;
padding: 1em;
border: 1px solid #DDD;
box-shadow: 0 15px 10px -10px rgba(31, 31, 31, 0.5);
z-index: 10;
}
.recipe-table__cell {
vertical-align: top;
padding: 3px 5px;
}
.recipe__text-field {
margin: 0;
padding: .45em 0.92em;
font-size: 1em;
line-height: 1.4;
color: #555555;
background-color: #FFF;
background-image: none;
border: 1px solid #CCC;
border-left: 1px solid #CCC;
}
.recipe-table__add-row {
margin-top: 0;
position: relative;
border-top: 1px solid #EEE;
z-index: 8;
}
.recipe-table__add-row-btn {
display: block;
cursor: pointer;
position: absolute;
right: 0;
left: 0;
width: 4em;
margin: 0 auto;
-webkit-transition: all .2s easy-in;
transition: all .2s easy-in;
text-align: center;
opacity: 0.5;
color: #fff;
border: 1px solid #16A085;
border-bottom-right-radius: 1em;
border-bottom-left-radius: 1em;
background: #16A085;
height: 1.5em;
line-height: 1.5em;
}
.recipe-table__add-row-btn:hover {
opacity: 1;
}
.recipe-table__del-row-btn {
cursor: pointer;
display: inline-block;
padding: .45em 0.92em;
font-size: 1em;
line-height: 1.4;
border: 1px solid #F39C12;
color: #F39C12;
text-decoration: none;
transition: all .3s;
text-align: center;
background-color: #fff;
}
.recipe-table__del-row-btn:hover {
background: #F39C12;
color: #fff;
}
.drag-handler {
width: 1.4em;
position: relative;
background-color: #E4E6EB;
background-image: linear-gradient(45deg, #E4E6EB, #E4E6EB 2px, #fff 2px, #fff 4px, #E4E6EB 4px, #E4E6EB 9px, #fff 9px, #fff 11px, #E4E6EB 11px, #E4E6EB 16px, #fff 16px, #fff 18px, #E4E6EB 18px, #E4E6EB 22px);
background-size: 10px 20px;
cursor: move;
border-top: 2px solid #FFF;
border-bottom: 2px solid #FFF;
}
.drag-handler:active {
background-image: linear-gradient(45deg, #bab86c, #bab86c 2px, #fff 2px, #fff 4px, #bab86c 4px, #bab86c 9px, #fff 9px, #fff 11px, #bab86c 11px, #bab86c 16px, #fff 16px, #fff 18px, #bab86c 18px, #bab86c 22px);
background-size: 10px 20px;
}
JS:
$(document).ready(function() {
$(document).on('click', '.recipe-table__add-row-btn', function (e) {
var $el = $(e.currentTarget);
var $tableBody = $('#recipeTableBody');
var htmlString = $('#rowTemplate').html();
$tableBody.append(htmlString);
return false;
});
$(document).on('click', '.recipe-table__del-row-btn', function (e) {
var $el = $(e.currentTarget);
var $row = $el.closest('tr');
$row.remove();
return false;
});
Sortable.create(
$('#recipeTableBody')[0], {
animation: 150,
scroll: true,
handle: '.drag-handler',
onEnd: function() {
console.log('More see in https://github.com/RubaXa/Sortable');
}
}
);
});
Powiązane problemy
- 1. Przeciąganie i upuszczanie bez przenoszenia elementu
- 2. jQuery: Jak mogę symulować przeciąganie i upuszczanie w kodzie?
- 3. Przeciąganie i upuszczanie * FROM * przeglądarki?
- 4. Przeciąganie i upuszczanie zdarzeń w osadzonym SVG?
- 5. Przeciąganie i upuszczanie plików na NSTableView?
- 6. Sortowanie lub zmiana kolejności wierszy tabeli w angularjs (przeciąganie i upuszczanie)
- 7. Jak zaimplementować przeciąganie i upuszczanie w Angular2?
- 8. Niestandardowe przeciąganie i upuszczanie Java w JPanel
- 9. HTML5: Przeciąganie/upuszczanie na osi X i bez zanikania?
- 10. Sortowalne przeciąganie i upuszczanie Jquery nie wyświetlające kursora "przesuwania"
- 11. PyQT4: Przeciąganie i upuszczanie plików do QListWidget
- 12. Przeciąganie i upuszczanie obrazów z galerii Android
- 13. HTML5 Przeciąganie i upuszczanie (DnD): zmiana kursora
- 14. Przeciąganie i upuszczanie IOS między widokami przewijania
- 15. Przeciąganie i upuszczanie dynamicznie utworzonego skrótu
- 16. Przeciąganie i upuszczanie WPF między kontenerami
- 17. Proste przeciąganie i upuszczanie do widoku?
- 18. Jak włączyć przeciąganie i upuszczanie wewnątrz JList
- 19. HTML5 Przeciąganie i upuszczanie - wykrywanie folderów w Safari (FileList, File)
- 20. Jaki jest najprostszy sposób, aby umożliwić użytkownikowi przeciąganie i upuszczanie wierszy tabeli w celu zmiany ich kolejności?
- 21. Html5 Przeciąganie i upuszczanie pozycji myszy w przeglądarce Firefox
- 22. Zmiana kolejności wierszy tabeli przez przeciąganie w Lion
- 23. Plik Przeciąganie i upuszczanie w Firefoksie (wersja 10)
- 24. Trwa przeciąganie i przeciąganie zdarzeń Jquery w Jquery UI
- 25. Akceptuj przeciąganie i upuszczanie obrazu z innego okna przeglądarki
- 26. Przeciąganie i upuszczanie obrazów z przeglądarki Firefox na Microsoft Powerpoint
- 27. Jak symulować przeciąganie i upuszczanie HTML5 w Selenium Webdriver?
- 28. jstree węzeł ograniczający przeciąganie i upuszczanie przed i po root
- 29. Przeciąganie i upuszczanie obrazu z przeglądarki do aplikacji WPF
- 30. Czy można symulować przeciąganie i upuszczanie w casperjs i phantomjs jak w selenach?
Dzięki! Pokażę to mojemu szefowi. – Bill
@YongkeBillYu, eksperyment zakończył się pomyślnie? –
Tak, rzeczywiście! Dziękuję Ci. – Bill