DEV Community

Cover image for DOM Manipulation in JavaScript
arjun
arjun

Posted on

DOM Manipulation in JavaScript

Day 7: DOM Manipulation in JavaScript

Date: December 14, 2024

Welcome to Day 7 of your JavaScript learning journey! Today’s topic focuses on DOM Manipulation, one of the most exciting aspects of JavaScript. With DOM manipulation, you can dynamically update, add, or remove elements from a webpage, making it interactive and user-friendly. By the end of today’s lesson, you’ll also create a simple To-Do List project to put your knowledge into practice.


1. What is the DOM?

The Document Object Model (DOM) is a programming interface for web documents. It represents the structure of an HTML document as a tree of objects, allowing you to access and manipulate elements programmatically using JavaScript.

Here’s an example of how the DOM represents HTML:

<html>
  <body>
    <h1>Welcome</h1>
    <p>This is a paragraph.</p>
  </body>
</html>
Enter fullscreen mode Exit fullscreen mode

The DOM tree for the above would look like this:

Document
 └── html
      └── body
           ├── h1
           └── p
Enter fullscreen mode Exit fullscreen mode

2. Accessing DOM Elements

You can access elements in the DOM using several methods:

Using getElementById

let title = document.getElementById("title");
console.log(title); // Logs the element with ID "title"
Enter fullscreen mode Exit fullscreen mode

Using getElementsByClassName

let items = document.getElementsByClassName("item");
console.log(items); // Logs all elements with class "item"
Enter fullscreen mode Exit fullscreen mode

Using querySelector and querySelectorAll

let firstItem = document.querySelector(".item"); // First element with class "item"
let allItems = document.querySelectorAll(".item"); // All elements with class "item"
Enter fullscreen mode Exit fullscreen mode

3. Modifying DOM Elements

Changing Content

You can update the text or HTML inside an element using:

  • innerText: Updates the visible text.
  • innerHTML: Updates the HTML content.
let title = document.getElementById("title");
title.innerText = "Updated Title"; // Changes visible text
title.innerHTML = "<strong>Updated Title</strong>"; // Adds HTML formatting
Enter fullscreen mode Exit fullscreen mode

Changing Styles

You can directly modify the CSS styles of an element.

let title = document.getElementById("title");
title.style.color = "blue";
title.style.fontSize = "24px";
Enter fullscreen mode Exit fullscreen mode

Adding or Removing Classes

let box = document.getElementById("box");
box.classList.add("highlight");  // Adds a class
box.classList.remove("highlight"); // Removes a class
Enter fullscreen mode Exit fullscreen mode

4. Handling Events

Events allow you to make your web pages interactive. Here are some common event types and how to handle them.

Inline Event Handling

In your HTML:

<button onclick="alert('Button Clicked!')">Click Me</button>
Enter fullscreen mode Exit fullscreen mode

Using addEventListener

This approach is preferred as it separates JavaScript from HTML.

let button = document.getElementById("btn");
button.addEventListener("click", function () {
  alert("Button Clicked!");
});
Enter fullscreen mode Exit fullscreen mode

Common Events

  • click: Triggered when an element is clicked.
  • mouseover: Triggered when the mouse hovers over an element.
  • keyup: Triggered when a key is released.

Example:

let inputField = document.getElementById("input");
inputField.addEventListener("keyup", function (event) {
  console.log(`You typed: ${event.target.value}`);
});
Enter fullscreen mode Exit fullscreen mode

5. Project: To-Do List

Let’s combine what you’ve learned into a simple To-Do List application.

HTML Structure

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>To-Do List</title>
</head>
<body>
  <h1>To-Do List</h1>
  <input type="text" id="taskInput" placeholder="Enter a task">
  <button id="addTaskBtn">Add Task</button>
  <ul id="taskList"></ul>
  <script src="script.js"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

JavaScript Code

// Access elements
let taskInput = document.getElementById("taskInput");
let addTaskBtn = document.getElementById("addTaskBtn");
let taskList = document.getElementById("taskList");

// Add event listener to the button
addTaskBtn.addEventListener("click", function () {
  let task = taskInput.value; // Get the input value
  if (task.trim() !== "") {
    // Create a new list item
    let listItem = document.createElement("li");
    listItem.innerText = task;

    // Add a delete button
    let deleteBtn = document.createElement("button");
    deleteBtn.innerText = "Delete";
    deleteBtn.addEventListener("click", function () {
      taskList.removeChild(listItem);
    });

    listItem.appendChild(deleteBtn); // Add delete button to the list item
    taskList.appendChild(listItem); // Add the list item to the task list
    taskInput.value = ""; // Clear the input field
  } else {
    alert("Please enter a task!");
  }
});
Enter fullscreen mode Exit fullscreen mode

How It Works

  1. User types a task in the input field.
  2. Clicking "Add Task" creates a new <li> element with the task.
  3. Each task has a "Delete" button to remove it.

6. Key Takeaways

  1. DOM Access: Use methods like getElementById and querySelector.
  2. DOM Modification: Change content, styles, and classes dynamically.
  3. Event Handling: Use addEventListener to make your pages interactive.
  4. Practice Project: Build a to-do list to reinforce your knowledge.

Practice Tasks for Day 7

  1. Add a "Mark as Done" feature to your to-do list.
  2. Create a shopping list app where users can input items and their quantities.
  3. Experiment with event types like mouseover and keydown in a small project.

Next Steps

Tomorrow, on Day 8, we’ll explore Error Handling and Debugging, learning how to handle unexpected issues in your JavaScript code. See you then!

Top comments (2)

Collapse
 
kooiinc profile image
KooiInc • Edited

I would advise against using innerHTML

Maybe you like one of my libraries tinyDOM or JQL (both intended to take some heavy lifting of DOM manipulation).

Collapse
 
arjun98k profile image
arjun

thanks men appreciate your effort , great work ✨