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.