明るいものを見ても、目が痛くない!

しかし目が赤い。
依頼されていたプログラムを書き忘れていた。
無理して徹夜した。
合間に、回答する

JavaScriptのメモ帳アプリ編集について
http://oshiete.goo.ne.jp/qa/8596665.html

わがままそうだから無視されるだろう。

<!DOCTYPE html>
<meta charset="utf-8">
<title></title>
<style>
body > section {
  display : none;
}

#ViewPage > div {
  border: 2px green dotted;
  margin-top : 1em;
  padding : 1ex;
}

#LIST li {
  text-overflow: ellipsis;
}
</style>

<body>

<section id="TopPage">
  <header>
    <h1>TextMemo</h1>
  </header>
  <ol id="List">
  </ol>
</section>


<section id="EditPage">
  <header>
    <h1>Edit Memo</h1>
    <a href="#TopPage">Top</a>
    <a href="#Save">Save</a>
    <a href="#ViewPage">View</a>
  </header>

  <p>
    Memo:
  <p>
    <textarea cols="60" rows="10" id="Text"></textarea>
</section>


<section id="ViewPage">
  <header>
    <h1>View Memo</h1>
    <a href="#TopPage">Top</a>
    <a href="#Save">Save</a>
    <a href="#EditPage">Edit</a>
  </header>
  <div id="Content"></div>
</section>

<script>
/*
すべてのデータをDATA変数にし、JSON.stringifyでテキスト化しローカルストレージに保存する。
グローバル変数のNO は、現在参照されているDATAのインデクスを表す。

*/

//対照だけを表示
function disp (s) { s.style.display = this == s ? 'block': 'none' }

//子ノードを全削除
function remove (e) { while (e.hasChildNodes ()) e.removeChild (e.firstChild) }

//リストノードを作る
function createLI (t, h) {
  var d = document;
  var a = d.createElement ('a');
  var li = d.createElement ('li');
  
  a.href = h;
  return li.appendChild (a).appendChild (d.createTextNode (t)), li;
}


function hashCheck (h) {
  var p, n;
  
  if (p = /^(#ViewPage)-(\d+)$/.exec (h)) //ハッシュを調べページ指定があるか?
    h = p[1], NO = Number (p[2]);
  
  switch (h) {
  case '' :
  case '#TopPage' :
    remove (LIST);
    for (var i = 0, I = DATA.length; i < I; i++)
      LIST.appendChild (createLI (DATA[i].substring (0, 20), '#ViewPage-' + i));
    LIST.appendChild (createLI ('[New]', '#NewPage'));
    SECTION.forEach (disp, TOP);
    break;
  
  case '#NewPage' :
    NO = DATA.length;
  case '#EditPage' :
    TEXT.value = DATA[NO] || '';
    SECTION.forEach (disp, EDIT);
    break;

  case '#ViewPage' :
    CONTENT.innerHTML = DATA[NO];
    SECTION.forEach (disp, VIEW);
    break;

  case '#Save' :
    DATA[NO] = TEXT.value;
    localStorage.setItem ('TextData',JSON.stringify (DATA));
    alert ('Save OK!');
    break;
    
  default :
    return false;
  }
  
  return true;
}


function listener (event) {
  var e = event.target;
  if ('href' in e)
    if (hashCheck (e.getAttribute ('href')))
      event.preventDefault();
}


var DATA = JSON.parse (localStorage.getItem ('TextData')) || [];
var LIST = document.querySelector ('#List');
var TEXT = document.querySelector ('#Text');
var CONTENT = document.querySelector ('#Content');
var TOP = document.querySelector ('#TopPage');
var EDIT = document.querySelector ('#EditPage');
var VIEW = document.querySelector ('#ViewPage');
var SECTION = [ TOP, EDIT, VIEW ];
var NO;


hashCheck (location.hash);
document.addEventListener ('click', listener, false);
</script>

</body>
</html>