javascript - 拖放 - 如何在 dragstart 事件和 drop 事件中获取实际的 html
问题描述
在dragstart
事件中,我想获取拖动元素的实际 html。dragstart
但是当我在某个事件
中做这样的事情时,console.log( e.target);
它会按预期给我这样的输出;
<p style="margin-right:72.45pt; margin-left:50.15pt; text-align:center; font-size:16pt" draggable="true"><strong>CONSULTING AND TECHNICAL SERVICES + (CATS+)</strong></p>
但是这段代码 console.log(JSON.stringify(e.target));
给了我这样的输出;
{"__zone_symbol__dragstartfalse":[{"type":"eventTask","state":"running","source":"HTMLParagraphElement.addEventListener:dragstart","zone":"angular","runCount":2}]}
dragstart
当从这样的drop
事件发送数据时
e.dataTransfer.setData('Id', e.target);
然后从e.dataTransfer
drop 事件中捕获数据
let sourceElement = event.dataTransfer.getData("Id");
console.log((sourceElement).innerHTML);
console.log((sourceElement).outerHTML);
我最终得到了这个输出[object HTMLParagraphElement]
,现在,我尝试如何将它[object HTMLParagraphElement]
转换为 UI 上可呈现的 HTML,.innerHTML and .outerHTML
但它在屏幕上给了我未定义的相当正确的输出。
解决方案
在dragestart
事件中使用这个
e.dataTransfer.setData('text/html', e.currentTarget.outerHTML);
代替
e.dataTransfer.setData('Id', e.target);
在 drop 事件中,您将获得 HTML 字符串。将该字符串转换为 HTML 元素,如下所示
let sourceElement = event.dataTransfer.getData("text/html");
let doc: any = new DOMParser().parseFromString(sourceElement, "text/html");
var clonedSourceHtmlElement: HTMLElement = <HTMLElement>(<HTMLElement>doc.firstChild.children[1].children[0]).cloneNode(true);
推荐阅读
- java - 是否可以在 IText 中更改已解析 HTML 的字体?
- sql-server - 期间内的多个值 期间内的这些值之一
- razor - 如何在表单中捕获 DropDownListFor 中的数据并将其传递给 routeValues
- c# - 如何向 WCF Web 服务添加注释?
- c# - 在评论中提取带括号的枚举?
- sql - SQL:搜索字符串集
- python - 使用 Visual Studio 在 Windows 上构建 caffe\Pycaffe - 错误?
- c# - 从 json 文件设置到 JWT 的数据注入
- vb.net - 底层连接已关闭,上周工作正常
- c# - 如何检查使用 SQL 和 C# 随机生成的问题的答案