【问题标题】:JQuery preserve draggability when element is removed删除元素时,JQuery 保留可拖动性
【发布时间】:2009-08-28 15:57:24
【问题描述】:

我试图在 DOM 中移动一个可拖动元素,但每当我尝试 replaceWith() 或 remove() 或类似函数时,它的可拖动性都会丢失。

是否可以让元素在 DOM 中移动时不会失去其可拖动性?

【问题讨论】:

    标签: jquery jquery-ui draggable


    【解决方案1】:

    解决方法是不使用jQuery来移动元素,而是使用纯DOM。

    也就是说,而不是

    $('#elem').remove().appendTo($('#elem2'))
    

    做

    var q = $('#elem'); var el = q.get(0); el.parentNode.removeChild(el); $('#elem2').appendChild(el);
    

    我不知道是否推荐,但它有效。

    【讨论】:

    • 我知道这是一个旧答案,但如果您不介意,我想知道为什么使用纯 DOM 可以解决问题?顺便说一句,你拯救了我的一天,非常感谢:)
    【解决方案2】:

    为什么不尝试在 DOM 中移动后再次创建可拖动行为:

    function xyz(){
        //move your stuff
        //create the draggable again
    
        $(element).draggable();
    }
    

    【讨论】:

    • 因为我的架构是这样的,我不能
    【解决方案3】:

    不,当您替换/删除 DOM 中的元素时,不可能保留可拖动性,除非您修改 jquery 核心(我不推荐这样做。)

    对 DOM 元素执行 replaceWith() 和 remove() 意味着它们被销毁,因此与它们相关的任何行为或事件也会被销毁。

    尝试创建一个包含可拖动行为的外部 <div>,当您想在放置时更改可拖动项目等时,替换 div 中的 HTML 等。

    或者(不那么优雅)您可以在您执行 replaceWith() 之后再次在您的元素上调用 draggable() 以恢复您使用 replaceWith() 删除的行为。

    同样,用hide() 代替remove() 来简单地让元素消失一段时间但保留它们的行为。

    简而言之:您错误地解决了问题。改变你的方法。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2021-09-18
      • 2015-02-23
      • 1970-01-01
      • 2016-02-27
      • 2012-09-21
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多