Helper 的可拖动更改 HTML

Draggable Change HTML of Helper

我认为这很简单,但要搜索几个小时才能找到答案。我想要做的是 "clone" 助手的可拖动 div,但稍微改变一下。以下是我想到的方法:

1) 在启动、创建或拖动事件中检测draggable 的id,将html 复制到变量,更改它,将其用作函数中的助手。这是行不通的,因为助手是在开始之前创建的,或者是在创建或拖动事件之前创建的,我会在其中检测到可拖动的 id。 2) 在helper函数中检测draggable的id,将html复制到变量中,改变它,作为函数中的helper使用。我不知道如何在辅助函数中获取可拖动的 id。 3) 使用克隆作为助手,然后使用创建、启动或拖动事件更改助手 html。

所以我需要知道以下两件事之一:

1) 如何检测辅助函数中可拖动元素的 div id?要么 2) 当启动或拖动事件被触发时,我如何更改克隆助手的 html?

相关代码如下:

function initiate_draggable() {
  $('.project_box').draggable( {
      containment: 'document',
      cursor: 'move',
      revert: true,
      start: loadDragDIV, 
      helper: folder_helper,
      cursorAt:{top: 5, left: 5}
  } );
}

function loadDragDIV( event, ui ) {
    // How can I change the html of the helper here?
}

function folder_helper( event, ui ) {
  // How do I return id of draggable element here so I can copy the html, change it and return it?
   return changed_draggable_html;
}

TIA,

周杰伦

将辅助函数移到 draggable 定义之外对您不利。最好在其中创建函数,如下所示:

$(".project_box").draggable({
  helper: function(){
    return $("<div></div>").append($(this).html()).data("clone-id", $(this).attr("id"));
  }
});

所以为了您的使用,您可以试试这个:https://jsfiddle.net/Twisty/2gno8cze/

HTML

<div class="project_box" id="pb-1">
  Drag Me
</div>

CSS

.project_box {
  background: #FFF;
  border: 1px solid #000;
  padding: 1em;
  width: 60px;
}

.box_helper {
  width: 60px;
  height: 1em;
  background: #ccc;
  border: 1px dashed #000;
}

jQuery

function initiate_draggable() {
  $('.project_box').draggable({
    containment: 'document',
    cursor: 'move',
    revert: true,
    //start: loadDragDIV,
    //helper: folder_helper,
    helper: function() {
      var content = $(this).html();
      var helper = $("<div>", {
        class: "box_helper"
      });
      helper.data("content", content);
      helper.data("box-id", $(this).attr("id"));
      return helper;
    },
    cursorAt: {
      top: 5,
      left: 5
    },
    stop: function(e, ui) {
      console.log("Clone of #" + ui.helper.data("box-id") + " Stopped.");
    }
  });
}

function loadDragDIV(event, ui) {
  // How can I change the html of the helper here?
  var cID = ui.helper.attr("id");
  ui.helper.data("current-id", cID);
}

function folder_helper(e, ui) {
  // How do I return id of draggable element here so I can copy the html, change it and return it?
  //return changed_draggable_html;
  var helper = $("<div>", {
    class: "box_helper",
    "data-current-id": $(this).data("current-id")
  });
  return helper;
}

$(function() {
  initiate_draggable();
});

现在您可以根据需要捕获 ID 或任何其他属性。将其存储在 data 中可以让您稍后对其进行处理而不会与 id 属性发生冲突。