What is the difference between innerHTML and textContent in JavaScript?

innerHTML:

innerHTML is a property that represents the HTML content within an element, including any HTML tags or markup. It allows you to set or retrieve the content of an element as a string of HTML.

For example:

<div id="myDiv">Hello <strong>world</strong></div>
// Retrieving content using innerHTML
const myDiv = document.getElementById("myDiv");
const innerHtmlContent = myDiv.innerHTML;
console.log(innerHtmlContent); // Output: "Hello <strong>world</strong>"

// Setting content using innerHTML
myDiv.innerHTML = "Hi <em>everyone</em>";

In the above example, innerHTML is used to retrieve the content of the div element with id “myDiv”, which includes the HTML tags as a string. It then sets the innerHTML property to “Hi everyone”, which will change the content of the div element to “Hi everyone”, with “everyone” in italic.

However, using innerHTML to set or retrieve content can potentially expose your application to security risks, such as cross-site scripting (XSS) attacks, if you’re not careful with input validation and sanitization.

On the other hand, textContent is a property that represents only the text content within an element, without any HTML tags or markup.

It allows you to set or retrieve the text content of an element as a plain string.

For example:

// Retrieving content using textContent
const myDiv = document.getElementById("myDiv");
const textContent = myDiv.textContent;
console.log(textContent); // Output: "Hello world"

// Setting content using textContent
myDiv.textContent = "Hi everyone";

In the above example, textContent is used to retrieve the text content of the div element with id “myDiv”, which returns only the plain text content without any HTML tags. It then sets the textContent property to “Hi everyone”, which will change the text content of the div element to “Hi everyone”.

One key difference between innerHTML and textContent is how they handle the content of an element that contains both text and HTML tags.

Let’s consider the following example:

<div id="myDiv">Hello <strong>world</strong></div>
// Retrieving content with HTML tags using innerHTML
const myDiv = document.getElementById("myDiv");
const innerHtmlContent = myDiv.innerHTML;
console.log(innerHtmlContent); // Output: "Hello <strong>world</strong>"

// Retrieving content without HTML tags using textContent
const textContent = myDiv.textContent;
console.log(textContent); // Output: "Hello world"

In the above example, when innerHTML is used to retrieve the content of the div element, it returns the content as a string of HTML, including the <strong> tags. However, when textContent is used to retrieve the same content, it returns only the plain text content without any HTML tags.

Another difference between innerHTML and textContent is how they handle setting content with special characters.

const myDiv = document.getElementById("myDiv");

// Setting content with special characters using innerHTML
myDiv.innerHTML = "Hello <em>world</em>"; // HTML tags will be interpreted

// Setting content with special characters using textContent
myDiv.textContent = "Hello <em>world</em>"; // Text content

In the above example, when innerHTML is used to set the content of the div element, the string "Hello <em>world</em>" will be interpreted as HTML, and the <em> tags will be rendered as italicized text within the div element. However, when textContent is used to set the content, the string "Hello <em>world</em>" will be treated as plain text, and the <em> tags will be displayed as part of the text itself, without any formatting.

It’s important to note that textContent is generally safer to use than innerHTML when dealing with user-generated or dynamic content, as it prevents potential XSS attacks by treating the input as plain text, without interpreting any HTML tags.

On the other hand, innerHTML should be used with caution and proper input validation and sanitization to avoid security risks.

Here’s a summary of the differences between innerHTML and textContent:

In conclusion, innerHTML and textContent are both useful properties in JavaScript for manipulating the content of HTML elements, but they have differences in how they handle HTML tags, special characters, and potential security risks.

Thank you for reading, and let’s have conversation with each other

Thank you for reading my article. Let’s have conversation on Twitter and LinkedIn by connecting.

Read more: