<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="https://web-engineering.info"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>web-engineering.info - LocalStorage</title>
 <link>https://web-engineering.info/taxonomy/term/57</link>
 <description></description>
 <language>en</language>
<item>
 <title>Managing Key-Value Stores with JavaScript&#039;s LocalStorage API</title>
 <link>https://web-engineering.info/node/79</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden view-mode-rss&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;&lt;em&gt;This article is a section from the book &lt;a href=&quot;https://gumroad.com/l/cSYoA/x2x02fm&quot;&gt;Information Management - An Introduction to Information Modeling and Databases&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a &lt;em&gt;key-value store&lt;/em&gt;, the information items are formed by &lt;em&gt;key-value pairs&lt;/em&gt; like the phone number directory entry ⟨&quot;Bob&quot;, &quot;(732) 516-8970&quot;⟩ or the English-German translation table row ⟨&quot;my car&quot;, &quot;mein Auto&quot;⟩.&lt;/p&gt;

&lt;p&gt;Well-known key-value store management systems are &lt;a href=&quot;https://redis.io/&quot;&gt;Redis&lt;/a&gt;, &lt;a href=&quot;https://www.oracle.com/database/berkeley-db/&quot;&gt;Oracle Berkeley DB&lt;/a&gt; and the &lt;em&gt;localStorage&lt;/em&gt; that is built into the Web programming language JavaScript.&lt;/p&gt;

&lt;p&gt;The key in a key-value pair must be unique. Normally, keys are strings. But a key-value DBMS may allow any value supported by the DBMS (strings, numbers, object references, etc.) to be a key. Normally, the value in a key-value pair may be any value supported by the DBMS.&lt;/p&gt;

&lt;p&gt;We show how to deal with key-value pairs and how to manage a key-value store using JavaScript, which provides a built-in object called &lt;code&gt;localStorage&lt;/code&gt; that allows storing a key-value pair in the following way:&lt;/p&gt;

&lt;pre&gt;
localStorage[&quot;Bob Jennings&quot;] = &quot;(732) 516-8970&quot;;&lt;/pre&gt;

&lt;p&gt;JavaScript programs are loaded and executed in the context of a webpage defined with HTML (the ). In our key-value store project, we embed the JavaScript code within the HTML files index.html, add.html, update.html, and delete.html, corresponding to the data management operations &lt;em&gt;Retrieve/List All&lt;/em&gt;, &lt;em&gt;Create/Add&lt;/em&gt;, &lt;em&gt;Update&lt;/em&gt; and &lt;em&gt;Delete&lt;/em&gt;. All of these HTML files contain the same navigation menu (in a &lt;code&gt;nav&lt;/code&gt; element), allowing to go to any of these pages for performing the corresponding data management operation.&lt;/p&gt;

&lt;h2&gt;2.1. Retrieving All Key-Value Pairs and Listing Them in a Table&lt;/h2&gt;

&lt;p&gt;The following HTML code contains a heading (the &lt;code&gt;h1&lt;/code&gt; element), an empty table that will be filled with the help of JavaScript code, a navigation menu (in the &lt;code&gt;nav&lt;/code&gt; element), and a &lt;code&gt;script&lt;/code&gt; element containing the JavaScript code.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
 &amp;lt;title&amp;gt;Phone Number Directory&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 &amp;lt;&lt;strong&gt;h1&lt;/strong&gt;&amp;gt;Phone Number Directory&amp;lt;/h1&amp;gt;
 &amp;lt;&lt;strong&gt;table&lt;/strong&gt;&amp;gt;
  &amp;lt;tbody id=&quot;directory&quot;&amp;gt;&amp;lt;/tbody&amp;gt;
 &amp;lt;/table&amp;gt;
 &amp;lt;hr/&amp;gt;
 &amp;lt;&lt;strong&gt;nav&lt;/strong&gt;&amp;gt;
  &amp;lt;ul&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&quot;index.html&quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&quot;add.html&quot;&amp;gt;Add an entry&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&quot;update.html&quot;&amp;gt;Update an entry&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&quot;delete.html&quot;&amp;gt;Delete an entry&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
 &amp;lt;/nav&amp;gt;
 &amp;lt;&lt;strong&gt;script&lt;/strong&gt;&amp;gt;
  ...
 &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;On this &quot;Home&quot; page of our data management app, the currently stored key-value pairs are retrieved from &lt;code&gt;localStorage&lt;/code&gt; and shown as table rows. If &lt;code&gt;localStorage&lt;/code&gt; is empty, four test data key-value pairs are created and added to the store. This is done by the following JavaScript code, which forms the content of the &lt;code&gt;script&lt;/code&gt; element:&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;script&amp;gt;
 // get a handle for accessing the &quot;directory&quot; table body element
 let tableBodyEl = document.getElementById(&quot;directory&quot;);
 // add some key-value pairs if the store is empty
 if (localStorage.length === 0) {
   localStorage[&quot;Bob Jennings&quot;] = &quot;(732) 516-8970&quot;;
   localStorage[&quot;Jane Anselm&quot;] = &quot;(732) 516-4301&quot;;
   localStorage[&quot;Tara Helms&quot;] = &quot;(504) 972-3381&quot;;
   localStorage[&quot;Tom Miller&quot;] = &quot;(282) 664-9357&quot;;
 }
 // show the contents of the store
 for (let key of Object.keys( localStorage)) {
   let row = tableBodyEl.insertRow();
   row.insertCell().textContent = key;
   row.insertCell().textContent = localStorage[key];
 }
&amp;lt;/script&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Exercise&lt;/strong&gt;: Open a text editor of your choice (e.g., &lt;a href=&quot;https://notepad-plus-plus.org/&quot;&gt;NotePad++&lt;/a&gt;). First copy and paste the HTML code above into your editor, then add the JavaScript code in the script element. Make a folder (e.g. with name &quot;KeyValueStoreExample&quot;) and save the content of your editor window in this folder as &quot;index.html&quot;. Then go to this folder (e.g., using Windows Explorer) and open the &quot;index.html&quot; file in a browser. You should see a page containing a table with 4 phone directory entries as in Table 1-1 above.&lt;/p&gt;

&lt;h2&gt;2.2. Adding a Key-Value Pair in a User Interface&lt;/h2&gt;

&lt;p&gt;The following HTML code contains a &lt;code&gt;form&lt;/code&gt; element (instead of a table) for allowing the user to enter new key-value pair data in a user interface. The navigation menu (in the &lt;code&gt;nav&lt;/code&gt; element) is the same as above and is therefore omitted.&lt;/p&gt;

&lt;p&gt;The form-based user interface consists of two labeled input fields (named &quot;key&quot; and &quot;value&quot;) and a &lt;em&gt;Save&lt;/em&gt; button. Each user interface element is contained in an HTML &lt;code&gt;p&lt;/code&gt; element that defines a layout block for it.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
 &amp;lt;title&amp;gt;Phone Number Directory&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 &amp;lt;h1&amp;gt;Phone Number Directory&amp;lt;/h1&amp;gt;
 &amp;lt;h2&amp;gt;&lt;strong&gt;Add an entry&lt;/strong&gt;&amp;lt;/h2&amp;gt;
 &amp;lt;form&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Name: &amp;lt;&lt;strong&gt;input&lt;/strong&gt; name=&quot;&lt;strong&gt;key&lt;/strong&gt;&quot;/&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Phone no.: &amp;lt;input name=&quot;&lt;strong&gt;value&lt;/strong&gt;&quot;/&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;button type=&quot;button&quot; onclick=&quot;&lt;strong&gt;save&lt;/strong&gt;()&quot;&amp;gt;Save&amp;lt;/button&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr/&amp;gt;
 &amp;lt;nav&amp;gt;...&amp;lt;/nav&amp;gt;
 &amp;lt;script&amp;gt;
  function &lt;strong&gt;save&lt;/strong&gt;() {
    let formEl = document.forms[0];  // the 1st form on the page
    localStorage[formEl.key.value] = formEl.value.value;
  }
 &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The &lt;code&gt;script&lt;/code&gt; element only contains the JavaScript code of the &lt;code&gt;save&lt;/code&gt; function, which adds the key-value pair entered in the form fields &quot;key&quot; and &quot;value&quot; to the &lt;code&gt;localStorage&lt;/code&gt; database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exercise&lt;/strong&gt;: Copy and paste the HTML code, including the &lt;code&gt;script&lt;/code&gt; element with its JavaScript code, into a fresh editor window. Don&#039;t forget to insert the content of the &lt;code&gt;nav&lt;/code&gt; element from the previous subsection. Then save the content of the editor window in your example folder as &quot;add.html&quot;. Then open the &quot;add.html&quot; file in a browser. You should see a page containing a user interface as in Figure 2-1 below. Add a name and a phone number and click the &lt;em&gt;Save&lt;/em&gt; button. Then click on &lt;em&gt;Home&lt;/em&gt; in the menu for checking if your new key-value pair has been added to the store.&lt;/p&gt;

&lt;div&gt;&amp;nbsp;&lt;/div&gt;

&lt;div&gt;&lt;img alt=&quot;Add a key-value pair&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/div&gt;

&lt;p&gt;Figure 2-1. The user interface of the key-value data management app for the operation &lt;em&gt;Add&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;2.3. Deleting a Key-Value Pair&lt;/h2&gt;

&lt;p&gt;For allowing the user to delete a key-value pair entry from the store, the user interface must provide a facility for choosing the entry to be dropped. For this purpose, HTML provides the &lt;code&gt;select&lt;/code&gt; element, which is rendered as a selection field that can be expanded to a list of options to choose from.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Delete&lt;/em&gt; user interface consists of a labeled selection field (named &quot;key&quot;) and a &lt;em&gt;Delete&lt;/em&gt; button.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
 &amp;lt;title&amp;gt;Phone Number Directory&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 &amp;lt;h1&amp;gt;Phone Number Directory&amp;lt;/h1&amp;gt;
 &amp;lt;h2&amp;gt;&lt;strong&gt;Delete an entry&lt;/strong&gt;&amp;lt;/h2&amp;gt;
 &amp;lt;form&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Name: &amp;lt;&lt;strong&gt;select&lt;/strong&gt; name=&quot;key&quot;&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;&lt;strong&gt;button&lt;/strong&gt; type=&quot;button&quot; onclick=&quot;&lt;strong&gt;destroy&lt;/strong&gt;()&quot;&amp;gt;Delete&amp;lt;/button&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr/&amp;gt;
 &amp;lt;nav&amp;gt;...&amp;lt;/nav&amp;gt;
 &amp;lt;script&amp;gt;...&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The following &lt;code&gt;script&lt;/code&gt; element contains the JavaScript code for filling the selection list with &lt;code&gt;option&lt;/code&gt; elements and the code of the &lt;code&gt;destroy&lt;/code&gt; function, which deletes the selected key-value pair both from the &lt;code&gt;localStorage&lt;/code&gt; store and from the selection list.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;script&amp;gt;
 // get a handle for accessing the form element
 let formEl = document.forms[0];
 // get a handle for accessing the &quot;key&quot; selection field
 let selectEl = formEl.key;
 // fill selection list with options
 for (let key of Object.keys( localStorage)) {
   let optionEl = document.createElement(&quot;option&quot;);
   optionEl.text = key;
   selectEl.add( optionEl, null);
 }
 function &lt;strong&gt;destroy&lt;/strong&gt;() {
   // delete from key-value store
   localStorage.removeItem( selectEl.value);
   // delete also from selection list
   selectEl.remove( selectEl.selectedIndex);
 }
&amp;lt;/script&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Exercise&lt;/strong&gt;: Copy and paste the HTML code into a fresh editor window. Don&#039;t forget to insert both the content of the &lt;code&gt;nav&lt;/code&gt; element (from a code listing above) and the content of the &lt;code&gt;script&lt;/code&gt; element. Save the resulting user interface page in your example folder as &quot;delete.html&quot;. Then open the &quot;delete.html&quot; file in a browser. You should see a page containing a user interface as in Figure 2-2 below. Choose a name and click the &lt;em&gt;Delete&lt;/em&gt; button. Then click on &lt;em&gt;Home&lt;/em&gt; in the menu for checking if the chosen key-value pair has been deleted from the store.&lt;/p&gt;

&lt;div&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/div&gt;

&lt;p&gt;Figure 2-2. The user interface of the key-value data management app for the operation &lt;em&gt;Delete&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;2.4. Updating a Key-Value Pair&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Update&lt;/em&gt; user interface consists of a labeled selection field (named &quot;key&quot;) for choosing the entry to be updated, an input field (named &quot;value&quot;) for entering the value (the phone number), and a &lt;em&gt;Save&lt;/em&gt; button.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
 &amp;lt;title&amp;gt;Phone Number Directory&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 &amp;lt;h1&amp;gt;Phone Number Directory&amp;lt;/h1&amp;gt;
 &amp;lt;h2&amp;gt;&lt;strong&gt;Update an entry&lt;/strong&gt;&amp;lt;/h2&amp;gt;
 &amp;lt;form&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Name: &amp;lt;select name=&quot;&lt;strong&gt;key&lt;/strong&gt;&quot; onchange=&quot;&lt;strong&gt;fillForm&lt;/strong&gt;()&quot;&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Phone no.: &amp;lt;input name=&quot;&lt;strong&gt;value&lt;/strong&gt;&quot;/&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;button type=&quot;button&quot; onclick=&quot;&lt;strong&gt;save&lt;/strong&gt;()&quot;&amp;gt;Save&amp;lt;/button&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr/&amp;gt;
 &amp;lt;nav&amp;gt;...&amp;lt;/nav&amp;gt;
 &amp;lt;script&amp;gt;...&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The following &lt;code&gt;script&lt;/code&gt; element contains the JavaScript code for filling the selection list with &lt;code&gt;option&lt;/code&gt; elements and the code of the functions &lt;code&gt;fillForm&lt;/code&gt; and &lt;code&gt;save&lt;/code&gt;. The function &lt;code&gt;fillForm&lt;/code&gt; is called when a name has been chosen in the selection field. The &lt;code&gt;save&lt;/code&gt; function assigns the updated value from the input field to the selected key in the &lt;code&gt;localStorage&lt;/code&gt; store.&lt;/p&gt;

&lt;table class=&quot;role-listing&quot; style=&quot;border-collapse:collapse; width:100%&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20&lt;/pre&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;pre&gt;
&amp;lt;script&amp;gt;
 // get a handle for accessing the form element
 let formEl = document.forms[0];
 // get a handle for accessing the &quot;key&quot; selection field
 let selectEl = formEl.key;
 // &lt;strong&gt;fill selection list&lt;/strong&gt; with options
 for (let key of Object.keys( localStorage)) {
   let optionEl = document.createElement(&quot;option&quot;);
   optionEl.text = key;
   selectEl.add( optionEl, null);
 }
 // fill form when an entry has been selected
 function &lt;strong&gt;fillForm&lt;/strong&gt;() {
   formEl.value.value = localStorage[selectEl.value];
 }
 // save in key-value store
 function &lt;strong&gt;save&lt;/strong&gt;() {
   localStorage[selectEl.value] = formEl.value.value;
 }
&amp;lt;/script&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Exercise&lt;/strong&gt;: Copy and paste the HTML code into a fresh editor window. Don&#039;t forget to insert both the content of the &lt;code&gt;nav&lt;/code&gt; element (from a code listing above) and the content of the &lt;code&gt;script&lt;/code&gt; element. Save the resulting user interface page in your example folder as &quot;update.html&quot;. Then open the &quot;update.html&quot; file in a browser. You should see a page containing a user interface as in Figure 2-3 below. Choose a name such that the associated phone number is shown. Change this phone number and click the &lt;em&gt;Save&lt;/em&gt; button. Then click on &lt;em&gt;Home&lt;/em&gt; in the menu for checking if the chosen key-value pair has been updated.&lt;/p&gt;

&lt;div&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/div&gt;

&lt;p&gt;Figure 2-3. The user interface of the key-value data management app for the operation &lt;em&gt;Update&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;section class=&quot;field field-name-field-category field-type-taxonomy-term-reference field-label-above view-mode-rss&quot;&gt;&lt;h2 class=&quot;field-label&quot;&gt;Category:&amp;nbsp;&lt;/h2&gt;&lt;ul class=&quot;field-items&quot;&gt;&lt;li class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/56&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;key-value store&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;field-item odd&quot;&gt;&lt;a href=&quot;/taxonomy/term/57&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;LocalStorage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;div class=&quot;easy_social_box clearfix horizontal easy_social_lang_und&quot;&gt;
            &lt;div class=&quot;easy_social-widget easy_social-widget-twitter first&quot;&gt;&lt;a href=&quot;http://twitter.com/share&quot; class=&quot;twitter-share-button&quot;
data-url=&quot;https://web-engineering.info/node/79&quot;
data-count=&quot;horizontal&quot;
data-lang = &quot;en&quot;
data-via=&quot;&quot;
data-related=&quot;:Check it out!&quot;
data-text=&quot;Managing Key-Value Stores with JavaScript&#039;s LocalStorage API&quot;&gt;Tweet&lt;/a&gt;&lt;/div&gt;
          &lt;div class=&quot;easy_social-widget easy_social-widget-facebook&quot;&gt;&lt;fb:like href=&quot;https://web-engineering.info/node/79&quot; send=&quot;true&quot; layout=&quot;button_count&quot; width=&quot;88&quot; show_faces=&quot;true&quot; action=&quot;like&quot; colorscheme=&quot;light&quot; font=&quot;&quot;&gt;&lt;/fb:like&gt;&lt;/div&gt;
          &lt;div class=&quot;easy_social-widget easy_social-widget-googleplus&quot;&gt;&lt;div class=&quot;g-plusone&quot; data-size=&quot;medium&quot; data-annotation=&quot;bubble&quot; data-href=&quot;https://web-engineering.info/node/79&quot;&gt;&lt;/div&gt;&lt;/div&gt;
          &lt;div class=&quot;easy_social-widget easy_social-widget-linkedin last&quot;&gt;&lt;script type=&quot;in/share&quot; data-url=&quot;https://web-engineering.info/node/79&quot; data-counter=&quot;right&quot;&gt;&lt;/script&gt;&lt;/div&gt;
  &lt;/div&gt; &lt;!-- /.easy_social_box --&gt;</description>
 <pubDate>Tue, 14 May 2019 20:49:40 +0000</pubDate>
 <dc:creator>gwagner</dc:creator>
 <guid isPermaLink="false">79 at https://web-engineering.info</guid>
 <comments>https://web-engineering.info/node/79#comments</comments>
</item>
</channel>
</rss>
