そこで、HTML5のドラッグアンドドロップの例に従いました。
http://www.html5rocks.com/en/tutorials/dnd/basics/#toc-dataTransfer
次のコードを作成しました
問題は、内部のhtmlだけでなく、要素全体とそのデータ属性を本質的に交換できるようにしたいということです。どうすればよいですか?
そこで、HTML5のドラッグアンドドロップの例に従いました。
http://www.html5rocks.com/en/tutorials/dnd/basics/#toc-dataTransfer
次のコードを作成しました
問題は、内部のhtmlだけでなく、要素全体とそのデータ属性を本質的に交換できるようにしたいということです。どうすればよいですか?
新しい要素をシリアル化および再解析するのではなく、要素自体を交換するだけで済みます。
var parent = this.parentNode,
insertionPoint, elem = this;
do {
elem = elem.nextSibling;
} while (elem && elem !== draggedItem);
insertionPoint = elem ? this : this.nextSibling;
parent.insertBefore(draggedItem, insertionPoint);
draggedItem = null;
http://jsfiddle.net/Vk5zT/7/を参照してください:
$(this).replaceWith($(draggedItem).clone(true,true));
$(draggedItem).replaceWith($(this).clone(true,true));
ただし.clone(true,true)
、イベントリスナーもコピーする必要がありますが、コピーしないため、ドラッグアンドドロップは機能しなくなります。関数を作成して解決しましたaddEvents
:
function addEvents(){
$('.segmentListItem').each(function(index){
$(this)[0].addEventListener('dragstart',handleDragStart,false);
$(this)[0].addEventListener('drop',handleDrop,false);
$(this)[0].addEventListener('dragover',handleDragOver,false);
});
}
その後:
$(this).replaceWith($(draggedItem).clone(true,true));
$(draggedItem).replaceWith($(this).clone(true,true));
addEvents();
編集:
イベントリスナーの問題を修正し、コードをjqueryに適合させました。