激活复选框后,会有各种<p>标记获得“结果”类。我对他们的操作如下:

function submit(){
  alert("in submit");
  var user_choice = document.getElementsByClassName("result");
  for (var i = 0; i < user_choice.length; i++){
    console.log(user_choice[i].innerHTML);
  }
  localStorage.setItem('storage',user_choice);
}


我希望这可以构成一个HTMLcollection。之后,在submitted.html页面(按提交按钮后重定向到该页面),我要console.log所有项目。所以我这样写:

window.onload = function() {
  if ( localStorage.getItem('storage')) {
    var got_user_choice = localStorage.getItem('storage');
    for (var i = 0; i < got_user_choice.length; i++){
      console.log(got_user_choice[i].innerHTML);
    }
 }
}


只要它是HTMLcollection(读取数组),我就可以使用数组进行操作。但是我在控制台中得到的只是undefined。我的代码有什么问题?

最佳答案

本地存储只能包含字符串,不能包含DOM元素。您应该对所有元素进行数组处理,然后将其转换为JSON。

function submit(){
  alert("in submit");
  var user_choice = document.getElementsByClassName("result");
  var html = [];
  for (var i = 0; i < user_choice.length; i++){
    console.log(user_choice[i].innerHTML);
    html.push(user_choice[i].innerHTML);
  }
  localStorage.setItem('storage',JSON.stringify(html));
}

07-24 17:42