【发布时间】:2009-08-28 15:57:24
【问题描述】:
我试图在 DOM 中移动一个可拖动元素,但每当我尝试 replaceWith() 或 remove() 或类似函数时,它的可拖动性都会丢失。
是否可以让元素在 DOM 中移动时不会失去其可拖动性?
【问题讨论】:
标签: jquery jquery-ui draggable
我试图在 DOM 中移动一个可拖动元素,但每当我尝试 replaceWith() 或 remove() 或类似函数时,它的可拖动性都会丢失。
是否可以让元素在 DOM 中移动时不会失去其可拖动性?
【问题讨论】:
标签: jquery jquery-ui draggable
解决方法是不使用jQuery来移动元素,而是使用纯DOM。
也就是说,而不是
$('#elem').remove().appendTo($('#elem2'))
做
var q = $('#elem'); var el = q.get(0); el.parentNode.removeChild(el); $('#elem2').appendChild(el);
我不知道是否推荐,但它有效。
【讨论】:
为什么不尝试在 DOM 中移动后再次创建可拖动行为:
function xyz(){
//move your stuff
//create the draggable again
$(element).draggable();
}
【讨论】:
不,当您替换/删除 DOM 中的元素时,不可能保留可拖动性,除非您修改 jquery 核心(我不推荐这样做。)
对 DOM 元素执行 replaceWith() 和 remove() 意味着它们被销毁,因此与它们相关的任何行为或事件也会被销毁。
尝试创建一个包含可拖动行为的外部 <div>,当您想在放置时更改可拖动项目等时,替换 div 中的 HTML 等。
或者(不那么优雅)您可以在您执行 replaceWith() 之后再次在您的元素上调用 draggable() 以恢复您使用 replaceWith() 删除的行为。
同样,用hide() 代替remove() 来简单地让元素消失一段时间但保留它们的行为。
简而言之:您错误地解决了问题。改变你的方法。
【讨论】: