web-dev-qa-db-fra.com

Comment passer un tableau dans l'attribut jQuery .data ()

Ok, donc je veux passer un tableau très basique dans un côté serveur d'attrubute de données jQuery comme ceci:

<div data-stuff="['a','b','c']"></div>

et ensuite comme ceci:

var stuff = $('div').data('stuff');

alert(stuff[0]);

Pourquoi cela semble-t-il alerter '[' et non 'a' (voir lien JSfiddle)

Lien JSFiddle: http://jsfiddle.net/ktw4v/3/

79
wilsonpage

Il traite votre variable comme une chaîne, dont l'élément zeroth est [.

Cela se produit car votre chaîne n'est pas JSON valide , ce qui devrait utiliser des guillemets doubles comme séparateur de chaîne au lieu de guillemets simples. Vous devrez ensuite utiliser des guillemets simples pour délimiter toute la valeur de l'attribut.

Si vous corrigez vos guillemets, votre code original fonctionne (voir http://jsfiddle.net/ktw4v/12/ )

<div data-stuff='["a","b","c"]'> </div>

var stuff = $('div').data('stuff');

Quand jQuery voit un JSON valide dans un attribut de données, il le décompresse automatiquement pour vous .

135
Alnitak

Le déclarer en tant qu'attribut signifie qu'il s'agit d'une chaîne.

Donc stuff[0] Serait équivalent à: var myString = "['a','b','c']"; alert(myString[0]);

Vous devez faire en sorte que cela ressemble à ceci:

<div data-stuff="a,b,c"></div>

var stuff = $('div').data('stuff').split(',');
alert(stuff[0]);

Retraction: l'analyse de jQuery échoue car elle ne respecte pas les règles de parseJSON.

Cependant, je me tiendrai derrière ma solution. Il y a des aspects des autres qui sont moins qu'idéaux, tout comme cette solution n'est pas idéale à certains égards. Tout dépend de ce que sont vos paradigmes.

12
John Green