2016-08-01 99 views
0

我试图将多个值(标题)存储到单个密钥中。我提示用户首先输入他们的标题,然后将其保存为“标题”。但是,当我输入多个值时,只有一个值被附加到密钥'标题'。另外,它说titles.push不是一个函数。推动数组;将多个值存储到单个密钥中

//get the title from user 
var title = prompt("What would you like your title to be?"); 
localStorage.setItem(title, editElem.innerHTML); 

//save the editor contents to local storage based on title 
document.getElementById("update").innerHTML = "Edits saved!"; 
var theDiv = document.getElementById("Contentable"); 
var content = document.createTextNode(title); 
theDiv.appendChild(content); 
var br = document.createElement("br"); 
theDiv.appendChild(br); 

//save the all titles in array so you know what documents exist 
var titles = localStorage.getItem("titles"); 
if(titles == null) 
    titles = new Array(); 
if(titles.indexOf(title) < 0) 
    titles.push(title); 
localStorage.setItem("titles", titles); 
+0

'如果(titles.indexOf(标题)<0)'将永远是一个'新的Array()真' –

+2

决不省略括号,尤其是不好的压痕。它使你的代码不可读 – poe123

+0

'titles'必须是'title.push'的一个数组作为函数。我不认为'localStorage.getItem'返回的内容通常是一个字符串。 - **如果您希望在本地存储中保存JS对象(如HTML),则必须使用'JSON.stringify'。** – evolutionxbox

回答

0

使用以下对象将标题推送到存储。请注意0​​如何从Array转换为string,以及JSON.parse的做法相反。

var titlesStore = 
     { 
      Count: function() { 
       var stack = JSON.parse(localStorage.getItem("titles")); 
       if (!stack) 
        return 0; 
       return stack.length; 
      }, 
      Peek: function() { 
       var stack = JSON.parse(localStorage.getItem("title")); 
       if (!stack) 
        stack = []; 
       if (stack.length > 0) 
        return stack.pop(); 
      }, 
      Push: function (token) { 
       var stack = JSON.parse(localStorage.getItem("titles")); 
       if (!stack) 
        stack = []; 
       stack.push(token); 
       localStorage.setItem("title", JSON.stringify(stack)); 
      }, 
      // more methods to you might wish to implement: search, insert, etc. 
     } 

    // usage: 
    titlesStore.Push("new title"); // sets the last title 
    titlesStore.Peek(); // gets the last title ; 
相关问题