Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在拖放中交换内容_Javascript_Html - Fatal编程技术网

Javascript 在拖放中交换内容

Javascript 在拖放中交换内容,javascript,html,Javascript,Html,我使用拖放功能,这样学生们就可以将一张杂乱的图像片段放到网格上,重新组合原始图像 两个网格(混乱和重建)都允许删除,并且一切正常 但是,在某些情况下,学生可能会将一个对象放在另一个对象上,我希望代码将原始对象移动到所选项目最近腾空的对象上 我尝试过不同的概念,可能走错了方向,但使用了以下方法进行测试: function drop(ev) { ev.preventDefault(); var tgt = ev.dataTransfer.getData("text"); va

我使用拖放功能,这样学生们就可以将一张杂乱的图像片段放到网格上,重新组合原始图像

两个网格(混乱和重建)都允许删除,并且一切正常

但是,在某些情况下,学生可能会将一个对象放在另一个对象上,我希望代码将原始对象移动到所选项目最近腾空的对象上

我尝试过不同的概念,可能走错了方向,但使用了以下方法进行测试:

function drop(ev) {
    ev.preventDefault();
    var tgt = ev.dataTransfer.getData("text");
    var currentContents = document.getElementById(tgt);
    ev.target.appendChild(document.getElementById(tgt));
    var newContents = document.getElementById(tgt);
    alert("Current = " + currentContents + " - New = " + newContents);

}
这里的想法是,我可以简单地存储元素细节本身,或者将innerHTML存储到一个变量中,允许像平常一样进行删除,然后将捕获的HTML分配给前一个div

但是,上面的代码仅报告[object HTMLimageElement](即使在本例中,收件人不包含任何图像数据)

我尝试了innerHTML,但根本没有收到任何结果


我甚至还没有开始研究如何识别拖动图像来自的原始div。

好的,我花了一些时间研究了所有我能理解的值

我的结局是:

function drop(ev) {
    ev.preventDefault();
    var prntId = ev.target.parentNode.id;
    var tgt = ev.dataTransfer.getData("text");
    var tgtId = ev.target.id;

    if (prntId === "targetDiv") {
        ev.target.appendChild(document.getElementById(tgt));
        imgPos[searchList(tgt)] = tgtId;
    } else {
        var thought = document.getElementById(prntId);
        var orgHTML = thought.innerHTML;
        var listPos = imgPos[searchList(tgt)];
        thought.removeChild(thought.firstChild);
        thought.appendChild(document.getElementById(tgt));
        document.getElementById(listPos).innerHTML = orgHTML;
        imgPos[searchList(tgtId)] = listPos;
        imgPos[searchList(tgt)] = prntId;
    }
}

function searchList(searchItem) {for (i = 0; i < 24; i++) {if (imgId[i] === searchItem) {return i;}}}
功能下降(ev){
ev.preventDefault();
var prntId=ev.target.parentNode.id;
var tgt=ev.dataTransfer.getData(“文本”);
var tgtId=ev.target.id;
如果(prntId==“targetDiv”){
ev.target.appendChild(document.getElementById(tgt));
imgPos[searchList(tgt)]=tgtId;
}否则{
var think=document.getElementById(prntId);
var orgHTML=think.innerHTML;
var listPos=imgPos[searchList(tgt)];
思想。removeChild(思想。第一个孩子);
appendChild(document.getElementById(tgt));
document.getElementById(listPos).innerHTML=orgHTML;
imgPos[searchList(tgtId)]=listPos;
imgPos[搜索列表(tgt)]=prntId;
}
}
函数searchList(searchItem){for(i=0;i<24;i++){if(imgId[i]==searchItem){return i;}}}
不是我写过的最漂亮的代码,而是功能性的

我发现,当DIV为空时,返回的ID是DIV的ID,而当添加一个子对象时,返回的ID是图像ID。我可以获得HTML img标记的全部内容,因此我拥有了所需的一切

基本上,如果DIV没有子元素,则事件target.parentNode.id返回“targetDiv”。一、 因此,将一个子项附加到DIV(dataTransfer中存储的数据返回的ID),并使用其新位置更新图像列表

但是,任何其他值都是父DIV的ID。因此,将目标DIV中的当前HTML复制到变量(orgHTML)中,找到tgt图像从中拖动的原始位置,将orgHTML数据放在这个现在已空出的DIV中

然后,一旦我从DIV中删除了任何子对象,我将继续执行该过程的drop部分,更新相关列表中图像的新位置

这是明摆着的(我累了,而且已经很晚了),但总有一天它可能会对某人有所帮助