2010-06-29 38 views
63

Por lo tanto, estaba pensando que podría recorrer localStorage como un objeto normal, ya que tiene una longitud. ¿Cómo puedo recorrer esto?Looping a través de localStorage en HTML5 y JavaScript

localStorage.setItem(1,'Lorem'); 
localStorage.setItem(2,'Ipsum'); 
localStorage.setItem(3,'Dolor'); 

Si hago un localStorage.length vuelve 3 que es correcto. Así que supongo que un bucle for...in funcionaría.

que estaba pensando algo como:

for (x in localStorage){ 
    $('body').append(localStorage[x]); 
} 

Pero fue en vano. ¿Algunas ideas?

La otra idea que tenía era algo así como

localStorage.setItem(1,'Lorem|Ipsum|Dolor') 
var split_list = localStorage.getItem(1).split('|'); 

En el que el for...in funciona.

Respuesta

106

Puede usar el método key. localStorage.key(index) devuelve la clave index th (el orden es definido por la implementación pero constante hasta que agregue o elimine claves).

for (var i = 0; i < localStorage.length; i++){ 
    $('body').append(localStorage.getItem(localStorage.key(i))); 
} 

Si las cuestiones de orden, se puede almacenar una matriz JSON-serializado:

localStorage.setItem("words", JSON.stringify(["Lorem", "Ipsum", "Dolor"])); 

El proyecto de especificación afirma que cualquier objeto que admite structured clone puede ser un valor. Pero esto no parece ser compatible todavía.

EDIT: Para cargar la matriz, agregar a ella, entonces la tienda:

var words = JSON.parse(localStorage.getItem("words")); 
words.push("hello"); 
localStorage.setItem("words", JSON.stringify(words)); 
+0

Muchas gracias! Esto es justo lo que estaba buscando. Voy a ver lo que JSON envió también. Eso será perfecto. Es para una aplicación iOS de Baby Names Offline HTML5. –

+0

Pregunta rápida, ¿cómo agregaría eso a JSON? ¿Cómo puedo agregar "hola" después de "Dolor"? –

+0

@Oscar, di un ejemplo más arriba. Básicamente, obtener, analizar, modificar la matriz, stringify, establecer. –

7

Esto funciona para mí en Chrome:

for(var key in localStorage) { 
    $('body').append(localStorage.getItem(key)); 
} 
+0

No funciona en mi Chrome. :( – TonyQ

+1

¿Qué parte exactamente? Este fragmento usa jQuery según la pregunta original. ¿Puedes probar esto en la consola chrome js? 'Para (var clave en localStorage) { console.log (localStorage.getItem (clave)); }' – jtblin

+0

@jtblin Acabo de probarlo, me devolvió 'TypeError: no se puede llamar al método 'toString' de null', así que asumo que 'key' está devolviendo nulo –

1

Basándose en la respuesta anterior que aquí hay una función que se recorra el almacenamiento local por clave sin conocer los valores clave.

function showItemsByKey() { 
    var typeofKey = null; 
    for (var key in localStorage) { 
     typeofKey = (typeof localStorage[key]); 
     console.log(key, typeofKey); 
    } 
} 

Si examina la salida de la consola verá que los elementos agregados por su código tienen un tipo de cadena. Mientras que los elementos incorporados son funciones {[código nativo]} o en el caso de la propiedad de longitud un número. Puede usar el tipo de variable Key para filtrar solo en las cadenas para que solo se muestren sus elementos.

Tenga en cuenta que esto funciona incluso si almacena un número o booleano como el valor, ya que ambos se almacenan como cadenas.

18

Además de todas las otras respuestas, puede utilizar $ .Cada función:

$.each(localStorage, function(key, value){ 

    // key magic 
    // value magic 

}); 

Con el tiempo, obtener el objeto con:

JSON.parse(localStorage.getItem(localStorage.key(key)));

0

Todas estas respuestas ignorar las diferencias entre las implementaciones de localStorage en navegadores. Los contribuyentes en este dominio deberían calificar sus respuestas con las plataformas que están describiendo. Una implementación en todo el navegador está documentada en https://developer.mozilla.org/en/docs/Web/API/Window/localStorage y, aunque es muy potente, solo contiene algunos métodos básicos. Recorrer los contenidos requiere una comprensión de la implementación específica de los navegadores individuales.

+0

¿Podría dar un ejemplo de cómo una de estas respuestas no funcionaría en un navegador? Esto fue hace mucho tiempo, pero no recuerdo haber tenido problemas al pasar por estas respuestas –

+0

. Quería que mi comentario se agregara a la transmisión general, no a esta publicación en particular, y puede haber sido un poco duro. Estaba frustrado en ese momento tratando de encontrar una solución de navegador cruzado. El ejemplo de Steve Isenberg (abajo) que contiene para (var clave en localStorage) { typeofKey = (typeof localStorage [key]); console.log (clave, tipo de clave); } no funciona en implementaciones WebKit (probarlo!) – StarTraX

+0

Esto funciona: for (var i = 0; i StarTraX

6

La forma más sencilla es:

Object.keys(localStorage).forEach(function(key){ 
    console.log(localStorage.getItem(key)); 
}); 
Cuestiones relacionadas