这是一个非常基础的例子,但适用于几种不同的情况。我使用了
jQuery UI Draggable + Sortable作为示例,并在
<ul id="sortable">
元素上绑定了
.droppable()
小部件,除了
.sortable()
小部件之外。
尽管不是最明智的方式,在可放置的小部件的
drop
事件中,我检查一个变量的值来确定移动元素的来源。(它是来自可排序列表还是我的拖动元素之一?)
如果它确实来自拖动元素之一,我就将其HTML更改为所需内容。否则它保持不变(因为你只是重新排列可排序的顺序)。
<ul>
<li id="draggable" class="ui-state-highlight">Drag me down</li>
</ul>
<br />
<br />
<br />
<ul id="sortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
JS
$(function () {
var origin = 'sortable';
$("#sortable").droppable({
drop: function (event, ui) {
if (origin === 'draggable') {
ui.draggable.html('<span>Look at this new fancy HTML!</span>');
console.log(ui.draggable);
origin = 'sortable';
}
}
}).sortable({
revert: true
});
$("#draggable").draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid",
start: function () {
origin = 'draggable';
}
});
});
这个例子相当无聊,因为新的 HTML 是静态的。但是假设你有一个自定义助手程序来实现每个可拖动元素,这应该成为你的新 HTML。
因此,你可以将一些 HTML 片段存储在数组中,并选择与索引或其他适配项匹配的条目。
它可能会像这样:
var helpersArr = ['<input type="text" />', '<input type="file" />', '<input type="submit" value="Save" />'];
var helper;
helper: function () {
helper = helpersArr[$(this).index()];
return helper;
}
ui.draggable.html(helper);
我相信你也可以通过避免使用helper变量并改用ui.helper
来实现相同的结果,但我无法弄清如何获取其中的HTML部分。如果这不能满足你的需求,请告诉我。总的来说,我认为你可以将我的示例用作更改拖放元素的HTML的不同目标的起点。