Advertisement
  1. Code
  2. JavaScript

The Downside of Using innerHTML to Manipulate the DOM and Some Alternatives

Scroll to top
Read Time: 5 min

Dynamically manipulating the DOM is a fundamental aspect of web development in creating interactive and functional web applications. The innerHTML property is commonly used to modify the DOM, but it has some drawbacks. This article will examine the downsides of using innerHTML and provide some alternative approaches that can avoid these potential problems.

The innerHTML Property

JavaScript has a property called innerHTML that lets you change an HTML element's content. This is used to set the content of HTML elements in a web page, including nested HTML elements. The value of innerHTML, when set, replaces the existing HTML content of that element. Although it is a useful approach to dynamically add or edit HTML information, there are some potential downsides that should be taken into account. 

Reasons to Avoid Using the innerHTML Property

1. Cross-Site Scripting (XSS) Threats

This is one of the key issues with using innerHTML. An XSS attack using innerHTML works by injecting malicious code into your website, which it then uses to carry out an attack. This is possible because innerHTML renders a complete markup and not just text. This might then provide an attacker the opportunity to steal confidential user information or conduct other illicit activities on the site. 

Never use innerHTML to display user-entered content or content that you don't write yourself!

2. It Can Be a Slower Method of Dynamically Updating HTML Content

innerHTML requires the browser to parse and render the element's whole HTML content, and this might take a while for larger elements or those elements that are updated regularly.

3. Accessibility

When updating information with innerHTML, people who use screen readers or other assistive technologies may experience accessibility problems. This is because changes made to the page using innerHTML may go undetected by screen readers.

4. Inner HTML Is Vulnerable to Errors

Unexpected behavior may occur, for instance, if the content being entered contains HTML that contradicts the page's existing markup. When integrating with third-party libraries or plugins or dealing with complex layouts, this can be particularly challenging.

Alternatives to Using the innerHTML Method

There are some alternative methods that can be used to dynamically update HTML contents instead of using the innerHTML method.

1. createElement()

This method allows you to create new HTML elements. It can be used to add new content to a web page or to modify existing content depending on events or the user's interaction with the element. To create a new element using the createElement method, you need to select the parent element that you want to add a new element to. Then use another method like the appendChild() method to add the new element to the DOM. 

1
const newParagraph = document.createElement('p');
2
3
const parentElement = document.getElementById('firstDiv');
4
parentElement.appendChild(newParagraph);

In the first line of code above, a new <p> element is created. This new element, although created, hasn't been added to the web page. The second line of code is where the parent element with a div name of firstDiv is selected as the element to which a new element will be added. The third line of code is where the appendChild method is used to add the newly created element to the parent element.

2. textContent()

This property allows you to set the text content of an HTML element. Here, only the text content is updated or modified, and not the entire HTML element. To use this method, you need to select the element you want to set the text content. You then set its text content using the textContent property.

1
const paragraphElement = document.getElementById('textOne');
2
paragraphElement.textContent = 'Adding a new text!';

In the first line of code, we are selecting an element with the id of textOne. Then, in the second line of code, we are using the textContent property to set its text content to some new text.

This method is a simpler way of updating the text content of an element when compared to using the innerHTML method. It is also less vulnerable to XXS attacks because it does not allow HTML to be injected into any element.

Using the innerText Property

The innerText property lets you access or modify an element's text content without the need for HTML tags. The value of innerText, when set, replaces the existing text content of that element.

Accessing and Modifying HTML Elements With innerText

Below is an example of how HTML elements can be accessed and modified using the innerText property:

1
const paragraphElement = document.getElementById('my-id');
2
paragraphElement.innerText = "Hello everyone!";

In the above example, we are getting the innerText of an element that has an ID of my-id and setting the text to "Hello everyone".

Comparing the innerText Property and the textContent Property

Although the textContent and innerText properties can both be used to set or access an element's text content, they handle styles and layouts differently. innerText only sets or gets the visible text content of an element, excluding any hidden or styled elements, while textContent sets or gets the text content of an element, including any whitespace or HTML tags.

In this example, you'll see how the innerText and textContent properties differ when dealing with CSS styles and layouts.

Click the Get innerText and Get textContent buttons to see the difference.

Notice in this example how the textContent property takes into consideration the CSS styles and layout of the main <p> element and maintains the styling. It returns the extra spacing and the span element. On the other hand, the innerText property doesn't take that into consideration and returns only the text content of the element.

Conclusion

To sum it all up, the createElement method, textContent property, and innerText property are powerful JavaScript features for dynamically manipulating web-page content. The textContent and innerText properties can be used to set or get an element's text content, while the createElement method allows developers to create new HTML elements and add them to the DOM.

Understanding how to use these methods and properties will enhance a developer's ability to use JavaScript to create dynamic and interactive web pages.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.