Programmatically change the src of an img tag
Categories:
Dynamically Changing Image Sources with JavaScript

Learn how to programmatically update the src
attribute of an <img>
tag using JavaScript, covering various methods and best practices for responsive and interactive web design.
In modern web development, dynamically changing content is a common requirement. One frequent task is to update the source (src
) of an <img>
element based on user interaction, data changes, or other programmatic logic. This article will guide you through different JavaScript methods to achieve this, ensuring your web applications are interactive and responsive.
Basic Method: Direct src
Manipulation
The most straightforward way to change an image's source is by directly accessing its src
property through the DOM (Document Object Model). You first need to get a reference to the <img>
element, and then you can assign a new URL to its src
attribute.
<img id="myImage" src="initial-image.jpg" alt="Initial Image">
HTML structure for an image element.
const myImage = document.getElementById('myImage');
myImage.src = 'new-image.jpg';
myImage.alt = 'New Image Description'; // It's good practice to update alt text too
Changing the image source using getElementById
.
alt
attribute when changing the src
to maintain accessibility for screen readers and for cases where the image fails to load.Handling Image Loading and Errors
When dynamically changing image sources, it's crucial to handle potential loading issues. Images might take time to load, or the new URL might be invalid. You can use the onload
and onerror
event handlers to manage these scenarios gracefully.
const myImage = document.getElementById('myImage');
myImage.onload = () => {
console.log('New image loaded successfully!');
// Perform actions after image loads, e.g., hide a spinner
};
myImage.onerror = () => {
console.error('Failed to load new image!');
myImage.src = 'placeholder-error.jpg'; // Fallback image
myImage.alt = 'Image failed to load';
};
myImage.src = 'potentially-slow-loading-image.jpg';
Using onload
and onerror
to handle image loading states.
flowchart TD A[User Action/Event] --> B{Change Image Source}; B --> C[Set `img.src` to new URL]; C --> D{Image Loading?}; D -- On Load --> E[Image Displayed Successfully]; D -- On Error --> F[Display Fallback Image/Error Message]; E --> G[Continue Application Flow]; F --> G;
Flowchart illustrating the process of dynamically changing an image source with error handling.
Using dataset
for Dynamic Image Selection
For more complex scenarios, such as a gallery or a product page where you have multiple image options, you can store image URLs in custom data-*
attributes (e.g., data-large-src
, data-thumbnail-src
) on the <img>
tag itself or a related element. This keeps your HTML semantic and your JavaScript cleaner.
<img id="productImage" src="small-product-1.jpg" data-large-src="large-product-1.jpg" alt="Product 1 Small">
<button onclick="showLargeImage()">View Large</button>
HTML with data-*
attributes for different image sizes.
function showLargeImage() {
const productImage = document.getElementById('productImage');
const largeSrc = productImage.dataset.largeSrc; // Accessing data-large-src
if (largeSrc) {
productImage.src = largeSrc;
productImage.alt = productImage.alt.replace('Small', 'Large');
}
}
JavaScript function to switch to a larger image using dataset
.
dataset
property provides an easy way to access custom data-*
attributes on an element. For example, data-my-attribute
becomes element.dataset.myAttribute
.1. Identify the Target <img>
Element
Use document.getElementById()
, document.querySelector()
, or document.querySelectorAll()
to get a reference to the <img>
tag you want to modify.
2. Prepare the New Image URL
Determine the new URL for the image. This could come from user input, an API response, a predefined list, or a data-*
attribute.
3. Assign the New src
and Update alt
Set the src
property of the <img>
element to the new URL (e.g., imageElement.src = newImageUrl;
). Crucially, also update the alt
attribute for accessibility: imageElement.alt = newAltText;
.
4. Implement Loading and Error Handling (Optional but Recommended)
Attach onload
and onerror
event listeners to the <img>
element before changing the src
to handle successful loading or failures gracefully. This prevents broken image icons and allows for fallback mechanisms.