Javascript,附加节点添加整个数组而不是最后一个元素

Javascript, append node adds whole array instead of last element

所以我仍在学习 javascript,对于我的第一个待办事项列表项目,我已经到了可以将数组添加到 HTML 页面的地步,而不是使用最后一个元素并添加它会将整个数组添加到每一行。如何更改它以便仅添加最后一个元素?

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Task Tracker</title>
    <link rel="stylesheet" type="text/css" href="todo.css">
    <script type="text/javascript" src="todo.js"></script>
</head>
<body>
    <div>
        <p>Task Manager</p>
        <input type="text" name="submitButton" id="userInput">
        <button onclick=addTask()>Enter</button>
    </div>
    <div>
        <h3>Task</h3>
        <div id='taskList'>
            <ul id="myList">
                
            </ul>
        </div>
    </div>
</body>
</html>

JavaScript

let Task = [];

function addTask(){
    var newTask = document.getElementById("userInput").value;
    Task.push(newTask);
    updateTaskList();
};

function updateTaskList(){
    var node = document.createElement('LI');
    var textNode;
    for (let i = Task.length - 1; i >= 0; i -= 1){
        textNode = document.createTextNode(Task[i]);
        console.log(Task[i]);
        node.appendChild(textNode);
        document.getElementById("myList").appendChild(node);
    }
}



您的 updateTaskList 函数总是遍历任务列表中的所有任务(通过 for 循环)。

如果您只想添加最后一个元素,您可以

编写一个附加函数,将单个元素添加到 DOM,然后您将在循环内和 addTask 函数内调用它(在这种情况下,您不会调用 updateTaskList来自您的 addTask 函数的函数)

从 DOM 中删除所有现有任务,然后添加更新列表中的所有任务(就像您现在所做的那样)

您可以将其合并为一个函数,而不是使用两个函数,代码如下所示

      function addTask() {
        let node = document.createElement("li");
        let textNode = document.createTextNode(
          document.getElementById("userInput").value
        );
        node.appendChild(textNode);
        document.getElementById("myList").appendChild(node);
      }

顺便说一句,最好不要再使用 var 关键字并将其替换为 let,(或者如果您不重新分配它,则使用 const)因为 let 是块作用域的(大多数时候它不会没关系,但 var 可能有奇怪的问题)

作为奖励,您可以想出如何在用户单击列表项时删除列表项并添加一个允许他们编辑的编辑按钮

另一件好事是设置一个 localStorage 数组来保存网站的数据,这样当用户重新加载时它会保存他们的列表项

如果你想获得真正的高级,你会设置一个后端数据库并设置用户身份验证

如果您想更深入地了解 coding/javascript,我强烈建议您使用 udemy 课程(不过只有在打折时)

希望这对您有所帮助,祝您编码愉快!

在 updateTaskList 中,每次都将所有任务附加到新创建的 LI 元素。 尝试仅附加最后一个任务。

function updateTaskList(){
    var node = document.createElement('LI');
    var textNode;
    var lastTaskIndex = Task.length - 1;
    textNode = document.createTextNode(Task[lastTaskIndex]);
    console.log(Task[lastTaskIndex]);
    node.appendChild(textNode);
    document.getElementById("myList").appendChild(node);
}