0

所以我仍在学习 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);
    }
}



4

3 回答 3

1

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

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

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

或者

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

于 2021-03-24T23:24:34.377 回答
1

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

      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 数组来保存网站的数据,这样当用户重新加载时,它会保存他们的列表项

如果您想真正进阶,您将设置一个后端数据库并设置用户身份验证

如果您想更深入地了解编码/javascript,我强烈建议您使用 udemy 课程(但仅在它们打折时)

希望这会有所帮助并祝您编码愉快!!

于 2021-03-24T23:31:45.507 回答
1

在 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);
}
于 2021-03-24T23:34:00.063 回答