我有2个自定义元素A和B。我现在已经设置了元素,以便可以将A拖放到B上,并且将A的副本添加为B的子元素。我不想虽然是孩子的A的副本。我希望A本身是孩子。
我该怎么做?
我正在使用dataTransfer将HTML发送到B,然后B正在构造A的副本。只要完成工作,我很乐意使用某些东西代替dataTransfer。我不想使用任何库。
CoffeeScript:
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()
谢谢! :)
答案 0 :(得分:0)
这似乎是不可能的。
相反,给所有元素唯一的ID,然后通过dataTransfer方法传递ID。这样,接收元素可以通过其ID查找该元素并直接对其进行引用。
通过收益获取唯一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)