2012-03-29 15 views
5

Si tiene los siguientes elementos DOMcreación de JSON de elementos DOM con jQuery

<div class="item">content1</div> 
<div class="item">content2</div> 

cómo, usando jQuery y Javascript, puedo construir un objeto JSON como el siguiente?

[{ 
'classname': 'item', 
'content': 'content1' 
} 
{ 
'classname': 'item', 
'content': 'content2' 
}] 

¿Alguna recomendación más?

+0

¿Por qué quieres hacer esto? A veces, la mejor representación de los datos son los datos en sí. –

+0

Considere guardar sus datos en un modelo MVC, no en el DOM ... –

+0

Estoy intentando construir una tabla JSON como la que se usa aquí: http://links.sourceforge.net/timeline/js/examples/example17_json_data.html Pero en lugar de escribir el html en el objeto json directamente, quería escribir el html en el DOM y _then_ construir el objeto json. ¿Es esta la mejor manera de hacerlo? – bento

Respuesta

6
var data = $('div.item').map(function(){ 
    return { 
     classname: 'item', 
     content: $(this).text() 
    }; 
}).get(); 

DEMO: http://jsfiddle.net/nDE7e/

+0

Agradable. ¿Cuáles son los méritos de hacerlo de esta manera sobre el uso de .each()? – bento

+0

'.map' le devolverá una matriz, en lugar de tener que hacer una de antemano. –

+0

Bueno saber. Gracias. – bento

0

Puede recorrer las divisiones de elementos y agregar objetos a una matriz.

var items = new Array(); 

$("div.item").each(function() { 
    var item = {classname: this.className, content: $(this).text()}; 
    items.push(item); 
}); 
2

http://jsfiddle.net/24JjD/

var datas = [{ 
    'classname': 'item', 
    'content': 'content1' 
    }, { 
    'classname': 'item', 
    'content': 'content2' 
    } 
]; 

$.each(datas, function(key, value) { 
    $('body').append('<div class="'+value.classname+'">'+value.content+'</div>'); 
});​ 

Respuesta correcta:

http://jsfiddle.net/tS9r5/

var datas = []; 

$('div.item').each(function() { 
    var data = { 
     classname: this.className, 
     content: $(this).text() 
    }; 
    datas.push(data); 
}); 

console.log(datas); 

+0

ups, que hizo todo lo contrario. –

+0

¡genial! Gracias. Es bueno saber cómo ir en ambos sentidos. – bento

Cuestiones relacionadas