基于JavaScript实现简单的待办事项列表功能|青训营

252 阅读2分钟

我们以一个简单的待办事项列表为例,实现添加、删除和标记完成的功能。

首先,我们需要一个HTML文件来创建页面结构。在文件中添加以下代码:

<!DOCTYPE html>  
<html lang="zh-CN">  
<head>  
  <meta charset="UTF-8">  
  <title>待办事项列表</title>  
</head>  
<body>  
  <h1>待办事项列表</h1>  
  <input type="text" id="todo-input" placeholder="请输入任务">  
  <button id="add-btn">添加</button>  
  <ul id="todo-list"></ul>  
  
  <script src="main.js"></script>  
</body>  
</html>  

接下来,在同一目录下创建一个名为 main.js 的JavaScript文件,并在文件中添加以下代码:

// 获取页面中的元素  
const todoInput = document.getElementById('todo-input');  
const addBtn = document.getElementById('add-btn');  
const todoList = document.getElementById('todo-list');  
  
// 绑定添加按钮的点击事件  
addBtn.addEventListener('click', addTodo);  
  
// 声明待办事项列表数组  
let todos = [];  
  
// 添加待办事项函数  
function addTodo() {  
  const todoText = todoInput.value.trim();  
  if (todoText) {  
    const todo = {  
      idDate.now(),  
      text: todoText,  
      completedfalse  
    };  
      
    todos.push(todo);  
    renderTodos();  
  
    todoInput.value = '';  
  }  
}  
  
// 删除待办事项函数  
function deleteTodo(id) {  
  todos = todos.filter(todo => ![]()todo.id !== id);  
  renderTodos();  
}  
  
// 标记完成/未完成状态函数  
function toggleCompleted(id) {  
  todos = todos.map(todo => {  
    if (![]()todo.id === id) {  
      return {  
        ...todo,  
        completed: !todo.completed  
      };  
    }  
    return todo;  
  });  
  renderTodos();  
}  
  
// 渲染待办事项函数  
function renderTodos() {  
  todoList.innerHTML = '';  
  
  todos.forEach(todo => {  
    const li = document.createElement('li');  
    const checkbox = document.createElement('input');  
    const text = document.createElement('span');  
    const deleteBtn = document.createElement('button');  
  
    checkbox.setAttribute('type''checkbox');  
    checkbox.checked = todo.completed;  
    checkbox.addEventListener('change'() => toggleCompleted(![]()todo.id));  
  
    text.innerText = todo.text;  
  
    deleteBtn.innerText = '删除';  
    deleteBtn.addEventListener('click'() => deleteTodo(![]()todo.id));  
  
    li.appendChild(checkbox);  
    li.appendChild(text);  
    li.appendChild(deleteBtn);  
  
    todoList.appendChild(li);  
  });  
}  

以上代码中,我们首先获取需要页面元素,并绑定按钮的点击事件。然后声明一个数组 todos 来存放待办事项列表。

在添加添加待办事项时,将用户输入的内容保存为一个 todo 对象,包含 idtext 和 completed 属性,并加入到 todos 数组中。之后调用 renderTodos 函数重新渲染待办事项列表,并清空输入框。

删除待办事项函数 deleteTodo 会根据传入的 id,使用 filter 方法来过滤出待删除的事项,并重新渲染。

标记完成/未完成状态函数 toggleCompleted 会根据传入的 id,使用 map 方法来更新指定事项的 completed 属性,并重新渲染。

最后,渲染待办事项函数 renderTodos 会先清空原有列表,然后根据 todos 数组中的每个事项,创建相应的 DOM 元素,并添加到页面中。

保存以上代码并在浏览器中打开HTML文件,你将看到一个简单的待办事项列表应用。通过输入内容并点击添加按钮,即可实现添加待办事项的功能。点击复选框可以标记事项为已完成或未完成。点击删除按钮可以删除对应的事项。

image.png

这就是一个基于JavaScript实现的简单待办事项列表功能。这是一个非常经典的功能,你可以在这个设计的基础上根据自己的需求进行扩展和优化,实现更多样化的设计,并应用到其他方面。