0
votes

Jeu de données HTML - comment mettre un objet? data-x = {}

HTML:
> 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)


1 commentaires

Bienvenue dans Stack Overflow. J'ai supprimé le texte chinois de la question car il s'agit d'un site uniquement en anglais .


3 Réponses :


2
votes

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>


1 commentaires

Notez que la chaîne de l'exemple n'est pas un JSON valide.



0
votes

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>


0 commentaires

2
votes

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>


2 commentaires

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. :)