使用类选择器进行jQuery拖放

时间:2014-11-17 11:37:52

标签: javascript jquery html

这对于专家来说必须是一个简单的。我是JS / jQuery的新手。我有一个拖动和复制的脚本,我根据我的要求修改了它。它使用“id”选择器实现。我想用“类”选择器实现相同的功能。

以下是fiddle demo

$(document).ready(function(){
$('#arsenal').on("dragstart", ( function (e) {
    e.originalEvent.dataTransfer.setData("Text", e.target.id);
}));

$('#leftbox').on("dragenter", ( function (e) {
    e.preventDefault();
}));

$('#leftbox').on("dragover", ( function (e) {
    e.preventDefault();
}));

$('#leftbox').on("drop", ( function (e) {
    e.preventDefault();
    $(this).empty();
    var data=e.originalEvent.dataTransfer.getData("Text");
    var nodeCopy = document.getElementById(data).cloneNode(true);
    nodeCopy.id = "newId";
    e.target.appendChild(nodeCopy);
}));

});

说明: 我有一个要求,我需要为一组动态添加的图像(使用JS)实现它。所以我不能使用目标图像的Id。我需要上课。我尝试但无法使其正常工作。 任何人都可以帮我这个吗?

提前致谢,

3 个答案:

答案 0 :(得分:3)

Here's a basic JSFiddle of what you're doing using classes.

这几乎是改变你的选择的问题:

$('.draggableImg').on("dragstart", ( function (e) {
    ...
});

还有一个小问题 - 如果您将图片拖到leftbox,然后将leftbox中的图片拖到leftbox ...您将收到错误。 (将图像复制到removeClass后,您可能只需要leftbox

另外,如果你说你的元素没有ID ...... 那么你需要传递图像的实际来源,而不是元素ID。这是一个updated fiddle which does that

here's一个你总是附加到方框而不是目标(可能是刚被清除的img)的地方!

答案 1 :(得分:2)

类选择器(" .class")选择具有给定类的所有元素。一个元素可以有多个类;只有其中一个必须匹配。

所以只需用clas选择器替换id,就像这样:

$('.class').on("dragstart", ( function (e) {
    e.originalEvent.dataTransfer.setData("Text", e.target.id);
}));

答案 2 :(得分:2)

使用类似' .js-drag-item'和' .js-drop-target'替换你的div id。我想添加' js - '所以我记得它是一个类名,它与Javascript相关联而不是CSS。

e.g。

JS

$('.js-drag-item').on("dragstart", ( function (e) {
   e.originalEvent.dataTransfer.setData("Text", e.target.id);
}));

HTML

<section class="js-drag-item">
    ....
</section>
<section class="js-drag-item">
    ....
</section>
etc

您可以根据需要添加任意数量的拖动项目或删除项目,JS将应用于所有这些项目