Solution 1 :

If you write var Lists = document.getElementsByTagName("List"); in your console.log(list) you will see the list of elements that you need right ?

The console.log also shows array the same way ,each element of an array is print to the log without you having to write a for() loop.

However if you want to use the array you have to write the for loop

[object HTMLCollection]

means that there is an array of HTML objects, To work with the data you have to use a for loop or array methods so before storing it in local storage

Try Make an array with the object collection with

var arr = Array.from(htmlCollection); 

Then save as is or convert to json string with

 var myJsonString = JSON.stringify(arr);

I trust this helps

Solution 2 :

First: its better if you use id to find the dom element from DOM API.
Second: you need to use .innerText to access the text content of list item.

<ul>
  <li id="item">hello</li>
</ul>

localStorage.setItem("myNodelist",document.getElementById("item").innerText);

Problem :

Using Javascript I am creating a list website (as a side-project).

I use the code:

var myNodelist = document.getElementsByTagName("LI");

and that works, but

localStorage.setItem("myNodelist", document.getElementsByTagName("LI"));

doesn’t. it just returns [object HTMLCollection]. Does anyone know why?

// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("u00D7");
  span.className = "close";
  span.appendChild(txt);
  myNodelist[i].appendChild(span);
}

// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
  close[i].onclick = function() {
    var div = this.parentElement;
    div.style.display = "none";
  }
}

// Add a "checked" symbol when clicking on a list item
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
  if (ev.target.tagName === 'LI') {
    ev.target.classList.toggle('checked');
  }
}, false);

// Create a new list item when clicking on the "Add" button
function newElement() {
  var li = document.createElement("li");
  var inputValue = document.getElementById("myInput").value;
  var t = document.createTextNode(inputValue);
  li.appendChild(t);
  if (inputValue === '') {
    alert("You must write something!");
  } else {
    document.getElementById("myUL").appendChild(li);
  }
  document.getElementById("myInput").value = "";

  var span = document.createElement("SPAN");
  var txt = document.createTextNode("u00D7");
  span.className = "close";
  span.appendChild(txt);
  li.appendChild(span);

  for (i = 0; i < close.length; i++) {
    close[i].onclick = function() {
      var div = this.parentElement;
      div.style.display = "none";
    }
  }
}
<!DOCTYPE html>
<html>

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    body {
      margin: 0;
      min-width: 250px;
    }
    /* Include the padding and border in an element's total width and height */
    
    * {
      box-sizing: border-box;
    }
    /* Remove margins and padding from the list */
    
    ul {
      margin: 0;
      padding: 0;
    }
    /* Style the list items */
    
    ul li {
      cursor: pointer;
      position: relative;
      padding: 12px 8px 12px 40px;
      list-style-type: none;
      background: #eee;
      font-size: 18px;
      transition: 0.2s;
      /* make the list items unselectable */
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    /* Set all odd list items to a different color (zebra-stripes) */
    
    ul li:nth-child(odd) {
      background: #f9f9f9;
    }
    /* Darker background-color on hover */
    
    ul li:hover {
      background: #ddd;
    }
    /* When clicked on, add a background color and strike out text */
    
    ul li.checked {
      background: #888;
      color: #fff;
      text-decoration: line-through;
    }
    /* Add a "checked" mark when clicked on */
    
    ul li.checked::before {
      content: '';
      position: absolute;
      border-color: #fff;
      border-style: solid;
      border-width: 0 2px 2px 0;
      top: 10px;
      left: 16px;
      transform: rotate(45deg);
      height: 15px;
      width: 7px;
    }
    /* Style the close button */
    
    .close {
      position: absolute;
      right: 0;
      top: 0;
      padding: 12px 16px 12px 16px;
    }
    
    .close:hover {
      background-color: #168e00;
      color: white;
    }
    /* Style the header */
    
    .header {
      background-color: #168e00;
      padding: 30px 40px;
      color: white;
      text-align: center;
    }
    /* Clear floats after the header */
    
    .header:after {
      content: "";
      display: table;
      clear: both;
    }
    /* Style the input */
    
    input {
      margin: 0;
      border: none;
      border-radius: 0;
      width: 75%;
      padding: 10px;
      float: left;
      font-size: 16px;
    }
    /* Style the "Add" button */
    
    .addBtn {
      padding: 10px;
      width: 25%;
      background: #d9d9d9;
      color: #555;
      float: left;
      text-align: center;
      font-size: 16px;
      cursor: pointer;
      transition: 0.3s;
      border-radius: 0;
    }
    
    .addBtn:hover {
      background-color: #bbb;
    }
  </style>
</head>

<body>

  <div id="myDIV" class="header">
    <h2 style="margin:5px">Groceries:</h2>
    <input type="text" id="myInput" placeholder="Title...">
    <span onclick="newElement()" class="addBtn">Add</span>
  </div>

  <ul id="myUL">

  </ul>


</body>

</html>

Comments

Comment posted by Barmar

What are you expecting to happen? You can only save strings in local storage. What does it mean to save DOM elements?

Comment posted by Nick Parsons

local storage can only store strings, so, document.getElementsByTagName gets converted to it’s string representation, which happens to be

Comment posted by Fredthedoggy

its storing a list. is there any other way to do this?

Comment posted by Barmar

If these are input fields, you need to loop over them and collect their values with

Comment posted by David

@FredTheDoggy: What is the

By