JavaScript > DOM Manipulation > Selecting Elements > getElementsByTagName()
Selecting Elements by Tag Name in JavaScript
This code snippet demonstrates how to use getElementsByTagName()
in JavaScript to select HTML elements based on their tag name. It includes clear examples and explanations to help you understand the concept and its practical applications.
Basic Usage of getElementsByTagName()
This snippet retrieves all elements with the tag name 'p' (paragraph elements) from the entire document. The getElementsByTagName()
method returns an HTMLCollection
, which is a live collection of elements. This means that if the DOM is modified after the collection is created, the collection will automatically update.
// Select all paragraph elements
const paragraphs = document.getElementsByTagName('p');
// Log the number of paragraphs found
console.log('Number of paragraphs:', paragraphs.length);
// Access the first paragraph element
if (paragraphs.length > 0) {
console.log('First paragraph text:', paragraphs[0].textContent);
}
Concepts Behind the Snippet
getElementsByTagName()
is a method of the document
object that returns an HTMLCollection
of elements with the specified tag name. The HTMLCollection
is a live collection, meaning it automatically updates when the DOM changes. The method searches the entire document for matching elements.
Real-Life Use Case
Imagine you have a blog post with numerous image elements (img
tags). You might use getElementsByTagName('img')
to collect all images, then iterate through the collection to add a specific class, set a default alt text, or attach an event listener to each image.
Example: Adding a Class to All Images
This code selects all img
elements on the page and adds the class 'my-image-class' to each of them. This is a practical example of how you can use getElementsByTagName()
to manipulate multiple elements at once.
// Select all image elements
const images = document.getElementsByTagName('img');
// Loop through the image elements and add a class
for (let i = 0; i < images.length; i++) {
images[i].classList.add('my-image-class');
}
Best Practices
getElementsByTagName()
is useful, more specific selectors like querySelector()
or querySelectorAll()
with CSS selectors are often more efficient if you're targeting a specific element or a small set of elements within a particular container.HTMLCollection
. Since it's a live collection, frequent access can impact performance, especially in large documents. Consider converting it to an array if you need to iterate over it multiple times.
Interview Tip
A common interview question involves the difference between getElementsByTagName()
, getElementsByClassName()
, querySelector()
, and querySelectorAll()
. Be prepared to discuss their return types (HTMLCollection
vs. NodeList
), whether they are live or static, and when you might choose one over the others.
When to Use getElementsByTagName()
Use getElementsByTagName()
when you need to select all elements of a specific tag type in the entire document or within a particular element. It's particularly useful when you need to apply a uniform change to all elements of a given type.
Memory Footprint
getElementsByTagName()
's live HTMLCollection
can have a higher memory footprint than static collections like those returned by querySelectorAll()
, especially on very large and complex pages. The live nature requires constant monitoring of the DOM.
Alternatives
Alternatives to getElementsByTagName()
include: querySelector()
and querySelectorAll()
. These methods use CSS selectors, offering more flexibility and often better performance when targeting specific elements. querySelectorAll()
returns a static NodeList
, which does not update with DOM changes.
Pros
Cons
HTMLCollection
, which can impact performance.querySelector()
and querySelectorAll()
.
FAQ
-
What is the difference between
getElementsByTagName()
andquerySelectorAll()
?
getElementsByTagName()
returns a liveHTMLCollection
, whilequerySelectorAll()
returns a staticNodeList
. TheHTMLCollection
updates automatically when the DOM changes, while theNodeList
does not.querySelectorAll()
also uses CSS selectors, providing more flexible element selection. -
Is
getElementsByTagName()
case-sensitive?
No, the tag name passed togetElementsByTagName()
is not case-sensitive. For example,document.getElementsByTagName('P')
will return the same elements asdocument.getElementsByTagName('p')
.