【发布时间】:2016-09-15 11:23:56
【问题描述】:
我有一个带有文本的 div,我需要在同一个 div 中拖放。
到目前为止我有这个:
var bindDraggables = function() {
console.log('binding draggables', $('.draggable').length);
$('.draggable').off('dragstart').on('dragstart', function(e) {
if (!e.target.id)
e.target.id = (new Date()).getTime();
e.originalEvent.dataTransfer.setData('text/html', e.target.outerHTML);
console.log('started dragging');
$(e.target).addClass('dragged');
});
}
$('#editor').on('dragover', function (e) {
e.preventDefault();
return false;
});
$('#editor').on('drop', function(e) {
e.preventDefault();
var e = e.originalEvent;
var content = e.dataTransfer.getData('text/html');
var range = null;
var startTrim = 0;
var endTrim = 0;
if (document.caretRangeFromPoint) { // Chrome
range = document.caretRangeFromPoint(e.clientX, e.clientY);
console.log(range.getBoundingClientRect());
}
else if (e.rangeParent) { // Firefox
range = document.createRange();
range.setStart(e.rangeParent, e.rangeOffset);
}
var sel = window.getSelection();
sel.removeAllRanges(); sel.addRange(range);
$('#editor').get(0).focus(); // essential
var spanId = 'temp-' + (new Date()).getTime();
document.execCommand('insertHTML', false, '<span id="' + spanId + '">\u200b</span>');
$('#' + spanId).replaceWith(content);
sel.removeAllRanges();
$('.dragged').remove();
console.log($(this).text());
bindDraggables();
});
bindDraggables();
<div id="editor" contenteditable="true">
First Second Third Fourth Fifth Sixth
</div>
#editor {
border: 2px solid red;
padding: 5px;
}
http://jsfiddle.net/gXScu/175/
我遇到的问题是文本是复制的,而不是移动的。
注意:由于可编辑/不可编辑的内容、额外的 CSS 和 jQuery 要求,我不能使用 textarea。
有人知道如何解决这个问题吗?
提前致谢
【问题讨论】:
标签: jquery drag-and-drop