原生JavaScript实现todolist功能

当我们提到todolist功能时,我们通常指的是一个可以添加、删除、编辑、标记已完成等功能的任务列表。

实现这样一个功能,可以使用原生JavaScript来完成。下面是一些步骤和示例代码:

步骤一:创建HTML结构

首先,需要创建一个HTML结构来展示任务列表。需要一个输入框来允许用户输入新任务,还需要一个可滚动的任务列表来展示已有的任务。每个任务项需要包含一个复选框来标记任务是否已完成,还需要包含一个编辑按钮来允许用户编辑任务。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Todo List</title>
</head>
<body>
  <h1>Todo List</h1>
  <input type="text" placeholder="Add New Task">
  <ul>
    <li>
      <input type="checkbox">
      <span>Buy Milk</span>
      <button>Edit</button>
      <button>Delete</button>
    </li>
    <li>
      <input type="checkbox">
      <span>Wash Car</span>
      <button>Edit</button>
      <button>Delete</button>
    </li>
    <li>
      <input type="checkbox">
      <span>Walk Dog</span>
      <button>Edit</button>
      <button>Delete</button>
    </li>
  </ul>
</body>
</html>

步骤二:添加CSS样式

接下来,需要使用CSS为任务列表添加样式,使其外观更美观。

示例代码:

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  font-family: Arial, sans-serif;
}

li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}

input[type="checkbox"] {
  margin-right: 10px;
}

button {
  background-color: transparent;
  border: none;
  color: #666;
  cursor: pointer;
}

button:hover {
  color: #000;
}

.completed {
  text-decoration: line-through;
  opacity: 0.5;
}

.editMode span {
  display: none;
}

.editMode input[type="text"] {
  display: inline-block;
  padding: 5px;
  margin-right: 10px;
  width: 200px;
  border: 1px solid #ccc;
  border-radius: 5px;
}

步骤三:使用JavaScript管理任务列表

接下来,需要使用JavaScript来添加、删除、编辑和标记任务为已完成。

示例代码:

// 获取DOM元素
var input = document.querySelector("input[type='text']");
var ul = document.querySelector("ul");

// 添加任务
function addTask() {
  if (input.value != "") {
    var li = document.createElement("li");
    li.innerHTML = `
      <input type="checkbox">
      <span>${input.value}</span>
      <button>Edit</button>
      <button>Delete</button>
    `;
    ul.appendChild(li);
    input.value = "";
    addEventListenerToButtons();
  }
}

// 删除任务
function deleteTask(el) {
  el.parentElement.remove();
}

// 编辑任务文本
function editTask(el) {
  var span = el.parentElement.querySelector("span");
  var input = el.parentElement.querySelector("input[type='text']");
  if (el.textContent == "Edit") {
    el.textContent = "Save";
    el.parentElement.classList.add("editMode");
    input.value = span.textContent;
    input.focus();
    input.selectionStart = 0;
    input.selectionEnd = input.value.length;
  } else {
    el.textContent = "Edit";
    el.parentElement.classList.remove("editMode");
    span.textContent = input.value;
  }
}

// 标记已完成
function toggleCompleted(el) {
  var span = el.parentElement.querySelector("span");
  if (el.checked) {
    span.classList.add("completed");
  } else {
    span.classList.remove("completed");
  }
}

// 给所有按钮添加事件监听器
function addEventListenerToButtons() {
  var buttons = document.querySelectorAll("li button");
  for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener("click", function(e) {
      if (e.target.textContent == "Delete") {
        deleteTask(e.target);
      } else {
        editTask(e.target);
      }
    });
  }
  var checkboxes = document.querySelectorAll("li input[type='checkbox']");
  for (var i = 0; i < checkboxes.length; i++) {
    checkboxes[i].addEventListener("click", function(e) { toggleCompleted(e.target); });
  }
}

// 给添加按钮添加事件监听器
var addButton = document.querySelector("input[type='button']");
addButton.addEventListener("click", addTask);
addEventListenerToButtons();

以上代码实现了添加、删除、编辑和标记任务为已完成的功能。在此基础上,您可以继续添加其他功能来完善您的todolist应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JavaScript实现todolist功能 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript中的对象和数组的应用技巧

    让我来为你详细讲解 Javascript 中的对象和数组的应用技巧。 对象的应用技巧 1. 使用对象来封装数据和函数 在 JavaScript 中,对象是一个拥有若干属性的数据结构。我们可以使用对象封装一些通用的属性和方法,便于代码的维护和实现。 // 定义一个封装后的学生对象 const student = { name: ‘张三’, age: 20, g…

    JavaScript 2023年5月27日
    00
  • JavaScript中计时器requestAnimationFrame、setTimeout、setInterval、setImmediate的使用和区别

    在JavaScript中,我们经常使用requestAnimationFrame、setTimeout、setInterval和setImmediate来控制代码的执行时机。它们各有特点和适用场景: 1. requestAnimationFrame: requestAnimationFrame主要用于浏览器动画渲染。这个函数允许你在下一次浏览器重绘前调用一个…

    JavaScript 2023年4月18日
    00
  • Three.js概述和基础知识学习

    Three.js 概述和基础知识学习 什么是 Three.js Three.js 是一个开源的 JavaScript 3D 图形库,它能够在网页上轻松创建和显示 3D 场景。它基于 WebGL(Web Graphics Library)技术,充分利用了浏览器的 GPU,可以呈现出非常流畅和逼真的 3D 图形。 学习 Three.js 的基础知识 1. 了解 …

    JavaScript 2023年6月11日
    00
  • javaScript合并对象的多种方式及知识扩展

    JavaScript合并对象的多种方式及知识扩展 什么是对象合并 在JavaScript中,合并对象指的是将多个对象中的属性和方法,合并成一个新的对象。这在实际应用中非常常见,特别是在处理大型复杂对象时,为了防止属性名冲突或简化处理逻辑,我们经常需要将多个对象合并成一个对象。 合并对象的多种方式 方法一:Object.assign Object.assign…

    JavaScript 2023年5月27日
    00
  • JS简单测试循环运行时间的方法

    下面是关于JS简单测试循环运行时间的方法的攻略。 1. 背景 在编写JavaScript程序的过程中,有可能需要对程序进行性能测试,以确定代码的运行时间。本文将介绍如何使用JavaScript来测试循环运行时间的方法。 2. 代码示例 示例 1: 下面就是一个通过比较时间差来测试循环执行时间的示例代码: // 定义一个需要测试运行时间的函数 function…

    JavaScript 2023年5月27日
    00
  • JavaScript手机振动API

    JavaScript手机振动API可以在移动设备上实现震动控制,让手机产生震动效果。本攻略将详细介绍如何使用JavaScript实现手机振动。 导入API 要使用JavaScript的手机振动API,需要使用Vibration API,该API基于Promise对象,包含两个方法:vibrate()和cancelVibration()。 要使用Vibrati…

    JavaScript 2023年6月11日
    00
  • 让插入到 innerHTML 中的 script 跑起来的实现代码

    首先需要了解一下,当通过 innerHTML 插入的 script 标签在页面渲染时会被认为是异步加载,因此可能会导致 script 中的内容没有被完全加载执行,而造成一些问题。为了解决这个问题,可以使用两种方法来让插入到 innerHTML 中的 script 能够正常执行。 方法一:使用 DOM API 动态创建 script 标签,避免使用 inner…

    JavaScript 2023年6月11日
    00
  • javascript进行数组追加方法小结

    当我们需要在JavaScript中向一个数组中添加新的元素的时候,我们需要使用“数组追加”方法。本篇文章将详细介绍JavaScript中的数组追加方法,并提供两个示例说明。 数组追加方法小结 数组追加方法,也叫”push”方法,是JavaScript中对数组进行添加新元素的方法之一。这个方法可以在数组的最后添加一个新的元素。 语法 arr.push(elem…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部