【发布时间】:2019-12-07 15:17:21
【问题描述】:
我正在制作一个在线编辑应用程序。通过单击左侧导航栏上的按钮来创建列表项。我想使用拖放事件在 div 周围移动列表,但我无法让它工作。错误消息是:'Node' 上的 appendChild':参数 1 不是 'Node' 类型。
<!DOCTYPE html>
<html>
<head>
<title>Editor</title>
<script>
window.onload = function(){
document.getElementById('newHead').addEventListener('click', addHeader);
document.getElementById('newLi').addEventListener('click', addListElement);
}
const addHeader = function(){
const newHeader = document.createElement('ul');
newHeader.className = 'newUl';
newHeader.textContent = 'header';
newHeader.setAttribute("contenteditable", true);
newHeader.setAttribute('draggable', true);
newHeader.id = 'Head';
const ul = document.getElementById('bulletPoints');
ul.appendChild(newHeader);
newHeader.addEventListener('click', selectElement);
}
const addListElement = function(){
if (selected != null){
const newListElement = document.createElement('li');
newListElement.className = 'newLi';
newListElement.textContent = 'textContent';
newListElement.setAttribute('contenteditable', true);
newListElement.setAttribute('draggable', true);
selected.appendChild(newListElement);
newListElement.addEventListener('click', selectElement);
newListElement.addEventListener('dragstart', drag);
}
}
let selected;
const selectElement = function(e){
selected = e.target;
}
const allowDrop = function(ev) {
ev.preventDefault();
}
const drag = function(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
const drop = function(ev){
ev.preventDefault();
let data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<div id="inputArea">
<div id="leftNav">
<button type='newHead' id='newHead' class='inlineButton'>Header</button>
<button type='newLi' id='newLi' class='inlineButton'>List</button>
</div>
<div id="bulletPoints" contenteditable="true" ondrop="drop(event)" ondragover="allowDrop(event)">
</div>
</div>
<script src="javascripts/script.js"></script>
</body>
</html>
【问题讨论】:
-
selected 在 addListElement 函数中包含什么?能否提供script.js中的代码,上面的代码没有运行
-
我已经修改了代码
-
还是不行,因为 selected 为空,函数 addListElement 永远不会被执行。
-
我已经修复了代码,现在可以使用了
标签: javascript html css dom-events