所以我在这里遵循了一个 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: