【问题标题】:Failed to execute 'insertBefore' on 'Node': parameter 1 is not of type 'Node' on Javascript无法在“节点”上执行“插入前”:参数 1 在 Javascript 上不是“节点”类型
【发布时间】:2021-02-19 17:09:29
【问题描述】:

我试图通过单击一个按钮来插入整个 HTML 元素,它确实有效,但它应该是一个可拖动元素,就像手动插入 HTML 作为示例一样,但是当尝试拖动我在控制台上收到此错误:无法在 'Node' 上执行 'insertBefore':参数 1 不是 'Node' 类型

拖动函数是这样写的:

dropzones.forEach(dropzone => {
    dropzone.addEventListener('dragover', e => {
        e.preventDefault
        const draggable = document.querySelector('.dragging')
        const afterElement = getDragAfterElement(dropzone, e.clientY)
        if (afterElement == null) {
            dropzone.appendChild(draggable)
        } else {
            dropzone.insertBefore(draggable, afterElement)
        }
    })
})

这是我尝试添加元素的方式:

addTaskButton.addEventListener("click", () => {
    let title = prompt('Set the title');
    let description = prompt('Set the description');
    const date = new Date().toLocaleDateString();

    let html = 
    <div class="draggable card" draggable="true">
        <div class="card-wrapper">
            <div class="card-header">
                <p>${date}</p>
                <div class="card-bullet"></div>
            </div>
        
            <h2 id="task-title">${title}</h2>
            <div class="task-members">
                <div class="task-member img"></div>
                <div class="task-member img"></div>
                <div class="task-member add"></div>
            </div>
        
            <div class="task-text">
                <h3>Description</h3>
                <p>${description}.</p>
            </div>
        </div>
    </div> 

    board.innerHTML += html
})

非常感谢您!

【问题讨论】:

  • 嗨 Filipe,欢迎来到 Stack Overflow。在被拖动的卡片上设置的draggable 类在哪里 - 在控制台上记录 document.querySelector('.dragging') 是否确认它是一个 (.card-wrapper) 元素?`
  • 记录为空

标签: javascript html node.js web


【解决方案1】:

很可能是因为您要在 DOM 中插入的节点(第一个参数)为空或未定义。 您可以通过运行重现此错误:

document.body.insertBefore(null, document.body.firstChild); 

您必须检查返回对draggable 的元素引用的行:

document.querySelector('.dragging') // must be not null, you can run in console and/or debug using the devtools to see what is happening

【讨论】:

  • 它正在记录 null,知道我需要做什么吗?只有在事件“dragstart”运行时才应添加类拖动,但它不起作用,如果我手动放置它会起作用,但当我尝试通过此“点击”事件添加时则不会。
  • 是因为该元素在文档中不存在,我正在查看您的html代码,如果您想获取“draggable="true"”元素,您可以更改行document.querySelector('.dragging')document.querySelector('.draggable')(类名)或document.querySelector('[draggable="true"]')(属性)
  • 谢谢,它开始工作了,现在我正在调整其他细节:D
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2015-01-20
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
相关资源
最近更新 更多