2010-11-26 3 views
32

Estoy intentando almacenar una matriz en la etiqueta de datos HTML. Por ejemplo:Almacene y use una matriz usando la etiqueta de datos HTML y jQuery

<div data-locs="{'name':'London','url':'/lon/'},{'name':'Leeds','url':'/lds'}"> 

Yo soy el acceso a esos datos usando jQuery. Me doy cuenta de que esto está almacenado como una cadena, y he intentado varios métodos para convertirlo en una matriz, pero me he topado con una pared. Si echas un vistazo a esta página de jsFiddle, verás un ejemplo completo de lo que intento hacer.

http://jsfiddle.net/B4vFQ/

¿Alguna idea?

Gracias!

Respuesta

67

Si utiliza JSON válida ([ y ] para la matriz, entre comillas dobles en lugar de individual), así:

<div id="locations" data-locations='[{"name":"Bath","url":"/location/bath","img":"/thumb.jpg"},{"name":"Berkhamsted","url":"/location/berkhamsted","img":"/thumb.jpg"}]'> 

Entonces lo que tiene (usando .data()) para obtener la matriz funcionará:

$('#locations').data('locations'); 

You can test it here.

+2

+1 No me di cuenta de que jQuery analizaría automáticamente JSON por usted. ¿Por casualidad sabes cómo lo detecta? ¿O simplemente hace un 'try/catch'. EDIT: Nevermind, parece que es un "try/catch". – user113716

+0

@patrick - jQuery 1.4.3+ con '.data()' hace el trabajo aquí, detecta el tipo ... también convierte números, etc. también –

+1

@cambraca - Si el navegador lo admite sí, pero algo tiene que llame a 'JSON.parse()' (y jQuery hace esto si es JSON allí), puede verlo pasando aquí: https://github.com/jquery/jquery/blob/master/src/data.js#L203 -218 –

-2

Prueba esto:

var testOne = eval("new Array(" + $('#locations').data('locations') + ")"); 

vistazo en jsfiddle.

+2

Esta no es una forma buena o segura de extraer datos, evite 'eval()' siempre que sea posible. Usar JSON real aquí es más correcto y más rápido, ¿por qué no usar el marcado correcto? :) –

+0

@Nick: Sí, estoy de acuerdo agregando [] al atributo es una mejor opción – cambraca

+0

que en realidad no va a resolver el problema, las citas son incorrectas también, pero definitivamente el mejor enfoque, para solucionar el problema no los síntomas –

4

Intente agregar [ y ] al principio y al final (esto lo hace válido como JSON). Después de hacerlo, puede usar JSON.parse() para convertirlo a un objeto JavaScript nativo.

+0

jQuery ya lo hace si es JSON válido (comillas dobles) ... solo agregar '[]' explotaría, ya que el 'JSON.parse' nativo necesita JSON válido para funcionar, y las comillas simples no lo son :) –

+0

@Nick Craver : ¡Tienes razón! No sabía que jQuery hace esto automáticamente. Muy impresionante. – jwueller

Cuestiones relacionadas