DOM Manipulation and Interactions

The Document Object Model (DOM) is a programming interface for web documents. It represents the structure of a web page, where each element (like paragraphs, headings, buttons, etc.) is an object that can be manipulated using JavaScript. DOM manipulation allows you to dynamically modify the content, structure, and style of a web page without reloading it. By interacting with the DOM, you can create highly interactive and responsive websites.

In this article, we’ll explore the basics of DOM manipulation and how to create meaningful interactions using JavaScript.


What is the DOM?

The DOM is a hierarchical representation of a web page’s structure, where each part of the page (such as elements, attributes, and text) is an object. JavaScript provides methods and properties to access and manipulate these DOM objects, making it possible to update content, change styles, add or remove elements, and handle user interactions dynamically.

When a web page loads, the browser creates a DOM for that page, which is a tree of objects. You can access and modify these objects using JavaScript.


Accessing DOM Elements

To manipulate the DOM, you first need to access the elements that you want to change. JavaScript provides various methods to select elements from the DOM.

1. getElementById()

This method returns the element with the specified id attribute.

let heading = document.getElementById("mainHeading");
heading.textContent = "Welcome to DOM Manipulation!";

In this example, the element with the id="mainHeading" is selected, and its text content is updated.

2. getElementsByClassName()

This method returns a collection of elements with a specific class name.

let items = document.getElementsByClassName("list-item");
items[0].style.color = "red";  // Changes the color of the first list item to red

Since getElementsByClassName() returns a live HTMLCollection, you can modify any of the elements in the collection by referencing their index.

3. querySelector()

The querySelector() method returns the first element that matches a specified CSS selector.

let button = document.querySelector(".btn-primary");
button.style.backgroundColor = "green";  // Changes the button background to green

4. querySelectorAll()

The querySelectorAll() method returns all elements that match a given CSS selector, as a static NodeList.

let listItems = document.querySelectorAll("ul li");
listItems.forEach(item => {
  item.style.fontSize = "18px";  // Changes the font size of each list item
});

Manipulating DOM Elements

Once you have selected the DOM elements, you can manipulate their content, attributes, and styles.

1. Changing Text Content

To change the text content of an element, you can use the textContent property.

let heading = document.getElementById("title");
heading.textContent = "New Title";  // Updates the text inside the element

Alternatively, you can use innerHTML if you want to modify HTML content inside an element.

let description = document.getElementById("description");
description.innerHTML = "<strong>Updated description text</strong>";

2. Modifying Attributes

You can modify an element's attributes using the setAttribute() method.

let link = document.querySelector("a");
link.setAttribute("href", "https://www.newlink.com");  // Updates the link’s href attribute

You can also get an attribute using getAttribute().

let src = document.querySelector("img").getAttribute("src");
console.log(src);  // Logs the source URL of the image

3. Changing Styles

You can change the styles of elements by modifying the style property directly.

let box = document.getElementById("box");
box.style.backgroundColor = "blue";  // Changes the background color to blue
box.style.padding = "20px";  // Adds padding to the box

Creating and Removing Elements

DOM manipulation also allows you to dynamically create and remove elements on the web page.

1. Creating New Elements

To create a new HTML element, you can use document.createElement(). After creating an element, you can append it to an existing element in the DOM.

let newDiv = document.createElement("div");
newDiv.textContent = "This is a dynamically created div!";
document.body.appendChild(newDiv);  // Adds the new div to the body of the page

You can also create and append multiple elements.

let newList = document.createElement("ul");
for (let i = 1; i <= 5; i++) {
  let newItem = document.createElement("li");
  newItem.textContent = "Item " + i;
  newList.appendChild(newItem);
}
document.body.appendChild(newList);  // Adds the list to the page

2. Removing Elements

To remove an element, you first need to select it, then call the remove() method.

let elementToRemove = document.getElementById("removeMe");
elementToRemove.remove();  // Removes the element from the DOM

Alternatively, if you want to remove an element's parent, you can use parentNode.removeChild().

let parentElement = document.getElementById("parent");
let childElement = document.getElementById("child");
parentElement.removeChild(childElement);  // Removes child element from parent

Event Handling and Interactions

DOM manipulation is often paired with event handling to respond to user actions such as clicks, keystrokes, and mouse movements.

1. Adding Event Listeners

To handle events, you can add event listeners to DOM elements. Event listeners are functions that run when an event occurs (such as a click).

let button = document.getElementById("submitButton");
button.addEventListener("click", function() {
  alert("Button clicked!");
});

In this example, when the user clicks the button with the id="submitButton", the function inside the addEventListener() is executed, displaying an alert.

2. Event Object

The event object is automatically passed to the event handler function. It contains details about the event that occurred, such as the type of event, the element that triggered the event, and the position of the mouse.

let button = document.getElementById("clickButton");
button.addEventListener("click", function(event) {
  console.log(event.target);  // Logs the element that triggered the event
  console.log(event.type);    // Logs the event type (click)
});

3. Removing Event Listeners

To stop an event listener from firing, you can use the removeEventListener() method. This requires the same function reference that was used when adding the event listener.

let button = document.getElementById("clickButton");
function handleClick() {
  alert("Button clicked!");
}
button.addEventListener("click", handleClick);

// Later in the code, you can remove the event listener
button.removeEventListener("click", handleClick);

Animating DOM Elements

You can also manipulate the DOM to create animations, such as moving elements or fading them in and out. Although CSS animations are often preferred for performance reasons, JavaScript provides more control for interactive or dynamic animations.

For example, to change an element’s position over time:

let box = document.getElementById("box");

let position = 0;
function moveBox() {
  position += 5;
  box.style.left = position + "px";

  if (position < 500) {
    requestAnimationFrame(moveBox);  // Continue the animation until the box reaches 500px
  }
}

moveBox();  // Start the animation

In this example, the moveBox() function changes the left style of the box, moving it across the screen.

Last updated

Was this helpful?