af_*_*mi4 2 html javascript dom appendchild domparser
我正在使用 DOMParser 来解析带有 html 标签的字符串,以将其附加到另一个 dom 节点上
window.addEventListener("load",carga);
var origen = document.getElementById('origen');
var destino = document.getElementById('destino');
function carga(e){
origen.addEventListener('dragstart',function(e){
e.dataTransfer.setData("Text",origen.outerHTML);
},false);
destino.addEventListener('dragover',function(e){
e.preventDefault();
});
destino.addEventListener('drop',function(e){
e.preventDefault();
console.log( e.dataTransfer.getData("Text"));
var parser = new DOMParser();
dragged = parser.parseFromString( e.dataTransfer.getData("Text") , "text/html");
console.log(dragged);
destino.appendChild(dragged);
},false);
}
Run Code Online (Sandbox Code Playgroud)
拖动变量的内容是:
<section draggable="true" id="origen" style="height: 50px; width: 50px; border-color: green; border-style: solid;">origen</section>
Run Code Online (Sandbox Code Playgroud)
实际上,当您将DOMParsersparseFromString()方法与选项一起使用时text/html,它将返回 aHTMLDocument而不是 DOM 元素。所以你不能直接将结果附加到元素上,这就是你得到TypeError: Argument 1 of Node.appendChild is not an object.
HTMLDocument在将其附加到元素之前,您需要获取其内容,这就是您应该如何实现它:
var parser = new DOMParser();
var dragged = parser.parseFromString( "<div><p>foo</p><p>bar</p></div>" , "text/html");
var divDoc = dragged.getRootNode();
destino.appendChild(divDoc.body);
Run Code Online (Sandbox Code Playgroud)
演示:
这是一个工作示例:
var parser = new DOMParser();
var dragged = parser.parseFromString( "<div><p>foo</p><p>bar</p></div>" , "text/html");
var divDoc = dragged.getRootNode();
destino.appendChild(divDoc.body);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3112 次 |
| 最近记录: |