Javascript 如何在长度发生变化的节点列表上使用insertBefore?
我是js的新手,所以请原谅我的愚蠢,DOM工作对我来说是一种痛苦 当我运行此命令时,Javascript 如何在长度发生变化的节点列表上使用insertBefore?,javascript,Javascript,我是js的新手,所以请原谅我的愚蠢,DOM工作对我来说是一种痛苦 当我运行此命令时,if块执行良好。它添加了一个新节点,使长度为2。但是,当我尝试添加另一项时,else块返回以下内容: 未捕获NotFoundError:未能在“节点”上执行“insertBefore”: 要在其前面插入新节点的节点不是的子节点 这个节点 这似乎是不可能的。正确的方法是什么 JS 加价 <!DOCTYPE html> <html lang="en"> <head> <
if
块执行良好。它添加了一个新节点,使长度为2。但是,当我尝试添加另一项时,else
块返回以下内容:
未捕获NotFoundError:未能在“节点”上执行“insertBefore”:
要在其前面插入新节点的节点不是的子节点
这个节点
这似乎是不可能的。正确的方法是什么
JS
加价
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form onsubmit="return todoSubmit()" id="todo-form">
<input id="todo-form-text" type="text">
<input id="todo-form-submit" type="submit">
</form>
<div id="todo-list">
</div>
<script src="script.js"></script>
</body>
</html>
文件
您的insertBefore顺序错误
var insertedNode = parentNode.insertBefore(newNode, referenceNode);
JS
请参见您的insertBefore顺序错误
var insertedNode = parentNode.insertBefore(newNode, referenceNode);
JS
请参阅不使用前端框架时可能出现的问题。像react.js和Angular.js这样的前端可以监视DOM的变化并对其进行更新。他们会更新可用DOM项的列表。因此,当您添加项目时,浏览器不会意识到添加了新节点。这就是浏览器显示错误的原因。当您不使用前端框架时,可能会发生错误。像react.js和Angular.js这样的前端可以监视DOM的变化并对其进行更新。他们会更新可用DOM项的列表。因此,当您添加项目时,浏览器不会意识到添加了新节点。这就是浏览器显示错误的原因。Ugh。。。我读了MDN,不知道我是怎么误读的。我一直在犯最愚蠢的错误,哈哈。谢谢你的帮助。啊。。。我读了MDN,不知道我是怎么误读的。我一直在犯最愚蠢的错误,哈哈。谢谢你的帮助。
'use strict';
let todoList = document.getElementById("todo-list");
let todoSubmit = () => {
// User input
let todoTextInput = document.getElementById("todo-form-text").value;
// New item
let todoItem = document.createElement("span");
let todoItemInput = document.createElement("input");
todoItemInput.setAttribute("type", "hidden");
let todoText = document.createTextNode(todoTextInput);
let todoLineBreak = document.createElement("br");
todoItem.appendChild(todoItemInput);
todoItem.appendChild(todoText);
todoItem.appendChild(todoLineBreak);
// Add to list
if (todoList.childNodes.length === 1) {
todoList.appendChild(todoItem);
} else {
todoList.insertBefore(todoItem, todoList.childNodes[1]);
}
return false;
}