所以,我有樂隊的名單,我想整理成運行的命令,就像這樣:HTML5可拖曳列表 - 多個setData?
<li data-band-id='1' draggable='true' class='band-name'>Metallica</li>
<li data-band-id='2' draggable='true' class='band-name'>Slayer</li>
<li data-band-id='3' draggable='true' class='band-name'>Paradise Lost</li>
<li data-band-id='4' draggable='true' class='band-name'>Gojira</li>
我希望能夠拖動這些列表項目內的整體改變每個波段佈局名單。到目前爲止,我有以下的JavaScript來做到這一點:
var dragSatMS = null;
function handleDragStart(e) {
//this.style.color = 'green';
dragSatMS = this;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text', this.innerHTML);
}
function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}
e.dataTransfer.dropEffect = 'move';
return false;
}
function handleDragEnter(e) {
this.classList.add('over');
}
function handleDragLeave(e) {
this.classList.remove('over');
//this.style.color = '#333';
}
function handleDrop(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
if (dragSatMS != this) {
dragSatMS.innerHTML = this.innerHTML;
this.innerHTML = e.dataTransfer.getData('text');
}
return false;
}
function handleDragEnd(e) {
[].forEach.call(mssatCols, function (mSatCol) {
mSatCol.classList.remove('over');
//mSatCol.style.color = '#333';
});
}
var mssatCols = document.querySelectorAll('#ms-saturday .band-name');
[].forEach.call(mssatCols, function(msSatCol) {
msSatCol.addEventListener('dragstart', handleDragStart, false);
msSatCol.addEventListener('dragenter', handleDragEnter, false);
msSatCol.addEventListener('dragover', handleDragOver, false);
msSatCol.addEventListener('dragleave', handleDragLeave, false);
msSatCol.addEventListener('drop', handleDrop, false);
msSatCol.addEventListener('dragend', handleDragEnd, false);
});
此作品完美,我可以通過拖放名單,讓他們適當地改變帶互換的地方而得名。但是,'data-band-id'屬性的值保持原樣。我知道這正是我所擁有的代碼,那就是我的問題。我想修改代碼,以便拖動和刪除樂隊的名稱和「data-band-id」屬性的值被交換。
我google了很多,但沒有發現什麼可以告訴我如何setData在多個值,任何幫助非常感激。
以下小提琴進一步支持此答案:https://jsfiddle.net/yw07rhcm/ –
非常感謝你:) – Kev
不客氣Kev :) – Yass