Build a Text Editor

Source Demo

By Samay Shamdasani


Getting Started

In this tutorial, we’ll make a text editor in the broswer. Using JavaScript, we can save the text automatically in a user’s localStorage so that whenever the text editor is pulled up, it remembers the text that was written. localStorage is a JavaScript object that let’s you save data in user’s browser.

As always, you’ll need a folder with three files:

Since we’re making a text-editor, our content has to be editable! Thankfully, HTML has an attribute for that. Go ahead: link the files, and create two divs with the contenteditable attribute and with a heading and a content id.

	  <title>Text Editor</title>
	  <meta name="viewport" content="width=device-width, initial-scale=1" />
	  <link rel="stylesheet" href="style.css" />

		 <div id="heading" contenteditable="true"></div>
		 <div id="content" contenteditable="true"></div>

	<script src="app.js"></script>


Open the html file in your bowser. You’ll see that you have two editable text boxes. However, they’re pretty ugly. Let’s style them!

Styling the Editor

Here’s some basic things you should do in your the style.css file:

This is my attempt. Feel free to customize your editor however you wish to!

  html {
    font-family: 'Helevetica', sans-serif;

  body {
    color: #333;
    font-weight: 100;
    max-width: 50em;
    margin: 0 auto;

  div:focus {
    outline: none;

  #heading {
    font-size: 48px;
    padding-top: 30px;

  #content {
    padding-top: 10px;
    font-size: 24px;

How does your editor look now? Play around with it! However, you may have noticed that if you refresh the page, the text doesn’t save. Let’s fix that.

JavaScript and localStorage function

To save the text in our two divs, we need to store it in the brower’s localStorage. To do that, we first have to get the div ids from the HTML document and set it to a localStorage instance with some default text. Then, we can write a function that checks the innerHTML of both the divs and saves it every second. Here’s what we have to write:

This is what the finished app.js should look like:

  document.getElementById('heading').innerHTML = localStorage['title'] || 'Just Write'; // default text
  document.getElementById('content').innerHTML = localStorage['text'] || 'This text is automatically saved every second :) '; // default text

  setInterval(function() { // fuction that is saving the innerHTML of the div
	localStorage['title'] = document.getElementById('heading').innerHTML; // heading div
	localStorage['text'] = document.getElementById('content').innerHTML; // content div
  }, 1000);