Javascript 通过拖放将自定义元素的对象引用传递给另一个自定义元素

Javascript 通过拖放将自定义元素的对象引用传递给另一个自定义元素,javascript,coffeescript,Javascript,Coffeescript,我有两个自定义元素,A和B。我目前设置了元素,以便我可以将A拖放到B上,并且A的副本被添加为B的子级。不过,我不希望A的副本成为子级。我想要一个孩子 我该怎么做 我使用dataTransfer将HTML发送到B,然后B正在构建a的副本。我很乐意使用一些东西来代替dataTransfer,只要它完成了任务。我不想使用任何库 咖啡剧本: class A extends HTMLElement constructor: () -> super() this

我有两个自定义元素,A和B。我目前设置了元素,以便我可以将A拖放到B上,并且A的副本被添加为B的子级。不过,我不希望A的副本成为子级。我想要一个孩子

我该怎么做

我使用dataTransfer将HTML发送到B,然后B正在构建a的副本。我很乐意使用一些东西来代替dataTransfer,只要它完成了任务。我不想使用任何库

咖啡剧本:

class A extends HTMLElement
    constructor: () ->
        super()
        this.setAttribute 'draggable','true'
        this.setAttribute 'ondragstart','drag(event)'
    drag: (event) ->
        event.stopPropagation()
        event.dataTransfer.setData 'symbol', this.outerHTML

class B extends A
    constructor: ->
        super()
        this.setAttribute 'ondrop','drop(event)'
        this.setAttribute 'ondragover','allowDrop(event)'
    drop: (event) ->
        event.preventDefault()
        event.stopPropagation()
    data = event.dataTransfer.getData 'symbol'
        template = document.createElement 'template'
        template.innerHTML = data
        try
            event.target.myFunctionToAddChild template.content.firstChild
    allowDrop: (event) ->
        event.preventDefault()

谢谢!:)

这似乎是不可能做到的

相反,给所有元素一个唯一的ID,然后通过dataTransfer方法传递ID。这样,接收元素就可以通过ID找到元素并直接引用它

通过yield获取唯一ID:

getUniqueID = ->
    num = 0
    loop
        num += 1
        yield 'Unique_ID:' + num
    return
发送ID:

drag: (event) ->
    event.stopPropagation()
    event.dataTransfer.setData "Unique_ID", this.id
接收ID并查找元素:

drop: (event) ->
    event.preventDefault()
    event.stopPropagation()
    Unique_ID = event.dataTransfer.getData 'Unique_ID'
    element = document.getElementById(Unique_ID)

这似乎是不可能做到的

相反,给所有元素一个唯一的ID,然后通过dataTransfer方法传递ID。这样,接收元素就可以通过ID找到元素并直接引用它

通过yield获取唯一ID:

getUniqueID = ->
    num = 0
    loop
        num += 1
        yield 'Unique_ID:' + num
    return
发送ID:

drag: (event) ->
    event.stopPropagation()
    event.dataTransfer.setData "Unique_ID", this.id
接收ID并查找元素:

drop: (event) ->
    event.preventDefault()
    event.stopPropagation()
    Unique_ID = event.dataTransfer.getData 'Unique_ID'
    element = document.getElementById(Unique_ID)