<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css">
<title>ToDoリスト</title>
</head>
<body>
<div id="app">
<h1>ToDoリスト</h1>
<div id="todo-container">
<div id="todo-form">
<input type="text" id="todo-input" placeholder="新しいToDoを追加">
<button onclick="addTodo()">追加</button>
</div>
<ul id="todo-list"></ul>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
body {
font-family: Arial, sans-serif;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
#app {
text-align: center;
}
#todo-container {
max-width: 400px;
margin: 20px auto;
}
#todo-form {
display: flex;
margin-bottom: 10px;
}
#todo-input {
flex: 1;
padding: 8px;
}
button {
padding: 8px 16px;
cursor: pointer;
}
// ToDoリストのデータ
let todos = [];
// DOM要素の取得
const todoInput = document.getElementById('todo-input');
const todoList = document.getElementById('todo-list');
// ToDoを表示する関数
function renderTodos() {
todoList.innerHTML = ''; // リストをクリア
// 各ToDoを表示
todos.forEach((todo, index) => {
const li = document.createElement('li');
li.innerHTML = `
<span>${todo}</span>
<button onclick="editTodo(${index})">編集</button>
<button onclick="deleteTodo(${index})">削除</button>
`;
todoList.appendChild(li);
});
}
// ToDoを追加する関数
function addTodo() {
const todoText = todoInput.value.trim();
if (todoText !== '') {
todos.push(todoText);
todoInput.value = '';
renderTodos();
}
}
// ToDoを編集する関数
function editTodo(index) {
const newTodoText = prompt('ToDoを編集', todos[index]);
if (newTodoText !== null) {
todos[index] = newTodoText.trim();
renderTodos();
}
}
// ToDoを削除する関数
function deleteTodo(index) {
if (confirm('本当に削除しますか?')) {
todos.splice(index, 1);
renderTodos();
}
}
// 最初の表示
renderTodos();
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.