This JavaScript code snippet helps you to create todo list with a search box. It allows you to add/remove tasks and search for a specific task from the list. Basically, the plugin uses Bootstrap 4 and Font Awesome for interface design. You can easily integrate this to-do list app into your web project to allow users to add tasks.
How to Create Todo List in JavaScript with Search Box
1. First of all, load the Bootstrap and Font Awesome CSS by adding the following CDN link into the head tag of your HTML document.
<!-- Bootstrap CSS --> <link rel='stylesheet' href='https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css'> <!-- Font Awesome CSS --> <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.6.3/css/all.css'>
2. Create the HTML structure as follows:
<div class="container">
<div class="row">
<div class="col-lg-5 col-md-6 col-sm-8 mx-auto">
<div class="card my-5">
<h5 class="card-header bg-primary text-white">
Todo List
</h5>
<div class="card-body">
<div class="input-group mb-3">
<input type="text" id="search" class="form-control" placeholder="Search todo">
<div class="input-group-append">
<span class="input-group-text"> <i class="fas fa-search"></i> </span>
</div>
</div>
<ul class="list-group mb-3">
<li class="list-group-item">
<i class="far fa-square done-icon"></i>
<i class="far fa-check-square done-icon"></i>
<span class="todo-text">It's a dummy todo item</span>
<i class="far fa-trash-alt"></i>
</li>
<li class="list-group-item done">
<i class="far fa-square done-icon"></i>
<i class="far fa-check-square done-icon"></i>
<span class="todo-text">This task is complete</span>
<i class="far fa-trash-alt"></i>
</li>
<li class="list-group-item">
<i class="far fa-square done-icon"></i>
<i class="far fa-check-square done-icon"></i>
<span class="todo-text">Here is another item</span>
<i class="far fa-trash-alt"></i>
</li>
</ul>
<button id="clearBtn" type="button" class="btn btn-dark btn-sm">Clear All</button>
</div>
<div class="card-footer">
<form id="form">
<div class="input-group">
<input type="text" class="form-control" id="todo" placeholder="Add new todo item">
<div class="input-group-append">
<button type="submit" class="btn btn-primary"><i class="fas fa-plus"></i> Add
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
2. After that, add the following CSS styles to your project:
.card {
box-shadow: 0px 0px 3px 1px #ddd;
}
.list-group-item {
padding: .5rem .75rem;
border: 1px solid rgba(0, 0, 0, .07);
display: flex;
align-items: center;
}
.list-group-item:first-child {
border-radius: 0;
}
.list-group-item:last-child {
border-radius: 0;
}
.list-group-item i.fa-square {
flex-grow: 0;
cursor: pointer;
order: 1;
}
.list-group-item i.fa-check-square {
display: none;
}
.list-group-item i.fa-trash-alt {
flex-grow: 0;
cursor: pointer;
color: #dc3545;
order: 3;
}
.list-group-item i.fa-trash-alt:hover {
color: #af1e2c;
}
.list-group-item .todo-text {
flex-grow: 1;
margin: 0 10px;
order: 2;
}
.list-group-item.done i.fa-check-square {
flex-grow: 0;
cursor: pointer;
color: #28a745;
display: block;
}
.list-group-item.done i.fa-square {
display: none;
}
.list-group-item.done .todo-text {
text-decoration: line-through;
color: #888;
}
3. Finally, add the following JavaScript code and done.
// Define all UI variable
const todoList = document.querySelector('.list-group');
const form = document.querySelector('#form');
const todoInput = document.querySelector('#todo');
const clearBtn = document.querySelector('#clearBtn');
const search = document.querySelector('#search');
// Load all event listners
allEventListners();
// Functions of all event listners
function allEventListners() {
// Add todo event
form.addEventListener('submit', addTodo);
// Remove and complete todo event
todoList.addEventListener('click', removeTodo);
// Clear or remove all todos
clearBtn.addEventListener('click', clearTodoList);
// Search todo event
search.addEventListener('keyup', searchTodo);
}
// Add todo item function
function addTodo(e) {
if (todoInput.value !== '') {
// Create li element
const li = document.createElement('li');
// Add class
li.className = 'list-group-item';
// Add complete and remove icon
li.innerHTML = `<i class="far fa-square done-icon"></i>
<i class="far fa-check-square done-icon"></i>
<i class="far fa-trash-alt"></i>`;
// Create span element
const span = document.createElement('span');
// Add class
span.className = 'todo-text';
// Create text node and append to span
span.appendChild(document.createTextNode(todoInput.value));
// Append span to li
li.appendChild(span);
// Append li to ul (todoList)
todoList.appendChild(li);
// Clear input
todoInput.value = '';
} else {
alert('Please add todo');
}
e.preventDefault();
}
// Remove and complete todo item function
function removeTodo(e) {
// Remove todo
if (e.target.classList.contains('fa-trash-alt')) {
if (confirm('Are you sure')) {
e.target.parentElement.remove();
}
}
// Complete todo
if (e.target.classList.contains('todo-text')) {
e.target.parentElement.classList.toggle('done');
}
if (e.target.classList.contains('done-icon')) {
e.target.parentElement.classList.toggle('done');
}
}
// Clear or remove all todos function
function clearTodoList() {
todoList.innerHTML = '';
}
// Search todo function
function searchTodo(e) {
const text = e.target.value.toLowerCase();
const allItem = document.querySelectorAll('.list-group-item');
for (let task of allItem) {
const item = task.textContent;
if (item.toLowerCase().indexOf(text) != -1) {
task.style.display = 'flex';
} else {
task.style.display = 'none';
}
};
}
That’s all! hopefully, you have successfully integrated this to-do list with the search box code snippet into your project. If you have any questions or facing any issues, feel free to comment below.
Similar Code Snippets:

I code and create web elements for amazing people around the world. I like work with new people. New people new Experiences.
I truly enjoy what I’m doing, which makes me more passionate about web development and coding. I am always ready to do challenging tasks whether it is about creating a custom CMS from scratch or customizing an existing system.



