> document.querySelector('a').dataset.test
< {a: 1}
typeof document.querySelector('a').dataset.test
"object"
Mais dans la Console Chrome:
> document.querySelector('a').dataset.test
< "{a: 1}"
typeof document.querySelector('a').dataset.test
"string"
J'esperais:
<a data-test="{a: 1}">test</a>
Comment puis-je écrire ce HTML? (Sans javascript)
3 Réponses :
Vous pouvez simplement utiliser JSON.parse(string object) .
var x = JSON.parse(document.querySelector('a').dataset.test);
console.log(x);
Modifié: veuillez vous assurer que votre attribut d'objet dans votre balise <a> est un JSON valide. Cela devrait être un <a data-test='{"a": 1}'>test</a>
Notez que la chaîne de l'exemple n'est pas un JSON valide.
Ce n'est pas possible. Un élément d'ensemble de données d'un élément ne peut contenir qu'une chaîne, rien d'autre - après tout, il est censé être représentable directement dans le HTML , et le HTML est une chaîne.
Définissez l'élément de l'ensemble de données au format JSON et analysez-le plus tard:
<a>test</a>
(notez les guillemets doubles autour de la clé, comme requis par JSON)
const map = new Map();
const a = document.querySelector('a');
map.set(a, { a: 1 });
const result = map.get(a);
console.log(result);
console.log(typeof result);<a>test</a>
Ou associez l'élément à ses données d'une autre manière, peut-être avec une carte dont les clés sont les éléments, et les valeurs sont les objets associés (si c'est une option):
const a = document.querySelector('a');
a.dataset.test = JSON.stringify({ a: 1 });
const test = JSON.parse(a.dataset.test);
console.log(test);
console.log(typeof test);<a data-test='{"a": 1}'>test</a>
Vous pouvez écrire votre HTML comme suit.
{a: 1}
Et puis dans ton script
console.log(JSON.parse(document.querySelector('a').dataset.test));
La sortie sera
<a data-test='{"a": 1}'>test</a>
Ceci est un site uniquement en anglais . Veuillez ne pas publier de réponses en chinois
@adiga Très bien. Je pensais juste que la personne qui posait cette question parlait probablement couramment le mandarin, alors je posterai une réponse en mandarin. Pour votre information, je fais les deux langues. En passant, la réponse est également assez explicite. :)
Bienvenue dans Stack Overflow. J'ai supprimé le texte chinois de la question car il s'agit d'un site uniquement en anglais .