Node: textContent property
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
The textContent property of the Node
interface represents the text content of the node and its descendants.
Note:
textContent and HTMLElement.innerText are easily confused,
but the two properties are different in important ways.
Value
A string, or null. Its value depends on the situation:
-
If the node is a
documentor a doctype,textContentreturnsnull.Note: To get all of the text and CDATA data for the whole document, use
document.documentElement.textContent. -
If the node is a CDATA section, a comment, a processing instruction, or a text node,
textContentreturns, or sets, the text inside the node, i.e., theNode.nodeValue. -
For other node types,
textContentreturns the concatenation of thetextContentof every child node, excluding comments and processing instructions. (This is an empty string if the node has no children.)
Warning:
Setting textContent on a node removes all of the node's children
and replaces them with a single text node with the given string value.
Differences from innerText
Don't get confused by the differences between Node.textContent and
HTMLElement.innerText. Although the names seem similar, there are
important differences:
textContentgets the content of all elements, including<script>and<style>elements. In contrast,innerTextonly shows "human-readable" elements.textContentreturns every element in the node. In contrast,innerTextis aware of styling and won't return the text of "hidden" elements.- Moreover, since
innerTexttakes CSS styles into account, reading the value ofinnerTexttriggers a reflow to ensure up-to-date computed styles. (Reflows can be computationally expensive, and thus should be avoided when possible.)
- Moreover, since
Differences from innerHTML
Element.innerHTML gets or sets HTML, as its name indicates. We advise against using innerHTML to get or set text inside an element because it deals with raw HTML rather than plain text and can be susceptible to XSS attacks. Even if you are sure that the text never contains HTML syntax, it is still less semantic and slower because it needs to invoke the HTML parser.
Examples
Start with this HTML fragment.
<div id="divA">This is <span>some</span> text!</div>
You can use textContent to get the element's text content:
let text = document.getElementById("divA").textContent;
// The text variable is now: 'This is some text!'
If you prefer to set the element's text content, you can do:
document.getElementById("divA").textContent = "This text is different!";
// The HTML for divA is now:
// <div id="divA">This text is different!</div>
Specifications
| Specification |
|---|
| DOM> # dom-node-textcontent> |
Browser compatibility
Loading…