J'essaie localStorage et j'essaie d'extraire du texte d'un div et de le stocker dans localStorage. Toutefois, il le définit comme [objet Object] et renvoie [objet Object]. Pourquoi cela arrive-t-il?
localStorage.content = $('#test').html('Test');
$('#test').html(localStorage.content);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test"></div>
Vous avez dit que vous essayez de obtenir le texte d'un div et le stocker sur un stockage local.
Remarque: le texte et le code HTML sont différents. Dans la question, vous avez mentionné le texte. html()
retournera un contenu HTML comme <a>example</a>
. si vous voulez obtenir du contenu Texte, vous devez utiliser text()
au lieu de html()
, le résultat sera example
au lieu de <a>example<a>
. Quoi qu'il en soit, j'utilise votre terminologie, que ce soit texte.
Étape 1: récupère le texte de div.
ce que vous avez fait n’est pas d’obtenir le texte de div mais de le définir comme div.
$('#test').html("Test");
met actuellement le texte à div et le résultat sera un objet jQuery. C'est pourquoi il le définit comme [object Object]
.
Pour obtenir le texte, vous devez écrire comme ceci$('#test').html();
Cela retournera une chaîne et non un objet, le résultat sera donc Test
dans votre cas.
Étape 2: définissez-le sur le stockage local.
Votre approche est correcte et vous pouvez l'écrire comme
localStorage.key=value
Mais l’approche privilégiée est
localStorage.setItem(key,value);
pour définir
localStorage.getItem(key);
pour obtenir.
la clé et la valeur doivent être des chaînes.
alors dans votre code de contexte deviendra
$('#test').html("Test");
localStorage.content = $('#test').html();
$('#test').html(localStorage.content);
Mais je ne trouve aucune signification dans votre code. Parce que vous voulez obtenir le texte de div et le stocker sur un stockage local. Et encore une fois, vous lisez la même chose à partir du stockage local et réglez-le sur div. juste comme a=10; b=a; a=b;
Si vous rencontrez d'autres problèmes, veuillez mettre à jour votre question en conséquence.
Utilisez setItem
et getItem
si vous souhaitez écrire des chaînes simples dans localStorage. De plus, vous devriez utiliser text()
si c'est le texte que vous cherchez, sinon vous obtiendrez le code HTML complet sous forme de chaîne.
// get the text
var text = $('#test').text();
// set the item in localStorage
localStorage.setItem('test', text);
// alert the value to check if we got it
alert(localStorage.getItem('test'));
JSFiddle: https://jsfiddle.net/f3zLa3zc/
// get html
var html = $('#test')[0].outerHTML;
// set localstorage
localStorage.setItem('htmltest', html);
// test if it works
alert(localStorage.getItem('htmltest'));
JSFiddle:
https://jsfiddle.net/psfL82q3/1/
Un utilisateur veut mettre à jour le localStorage lorsque le contenu de la div change. Comme il est difficile de savoir comment le contenu de la div change (ajax, autre méthode?), contenteditable
et blur()
sont utilisés pour modifier le contenu de la div et écraser l'ancienne entrée localStorage
.
// get the text
var text = $('#test').text();
// set the item in localStorage
localStorage.setItem('test', text);
// bind text to 'blur' event for div
$('#test').on('blur', function() {
// check the new text
var newText = $(this).text();
// overwrite the old text
localStorage.setItem('test', newText);
// test if it works
alert(localStorage.getItem('test'));
});
Si nous utilisions ajax, nous activerions plutôt la fonction via la fonction responsable de la mise à jour du contenu.
JSFiddle:
https://jsfiddle.net/g1b8m1fc/
Le localStorage
ne peut stocker que le contenu d'une chaîne et vous essayez de stocker un objet jQuery puisque html(htmlString)
renvoie un objet jQuery.
Vous devez définir le contenu de la chaîne au lieu d'un objet. Et utilisez la méthode setItem
pour ajouter des données et getItem
pour obtenir des données.
window.localStorage.setItem('content', 'Test');
$('#test').html(window.localStorage.getItem('content'));