2 votes

comment transformer les attributs de données html en json

Disons que j'ai ceci

<div id="x" data-id='1' data-prop1='peace' data-prop2='out'>Text</div>

En jQuery, je peux obtenir les données comme suit

var row = $('#x')

var x = {
    id : row.data('id'),
    prop1: row.data('prop1'),
    prop2: row.data('prop2'),
};

ce serait beaucoup plus pratique si je pouvais faire quelque chose comme ça

var row = $('#x');
var x = row.data.serialize();

Quelqu'un sait comment faire ?

EDIT :

J'ai oublié de mentionner que var x = row.data() fera l'affaire mais il y a tout ce jquery là-dedans.

Je veux envoyer les données dans le cadre d'une requête ajax une fois que je les ai obtenues.

eg,

remove: function (row, g, o) {

if (confirm(o.deleteConfirmation)) {

                    var url = o.deleteAction;
                    var data = row.data();

                    $.ajax({
                        url: url,
                        type: 'POST',
// THIS WORKS                                
//                            data: {
//                                id: row.data('id'),
//                                applicationId: row.data('applicationId')
//                            },
// THIS DOESN'T                                
                        data : data,
                        success: function (result) {
                            g.html(result.Html);
                            methods.rebind(g, o);
                        }
                    });
                }
 }

EDIT : Ma solution qui fonctionne

Je l'ai fait fonctionner en supprimant le truc jQuery{some number} de l'objet de données.

J'ai d'abord pris ceci sur ici

if (!String.prototype.startsWith) {
    String.prototype.startsWith = function(str) {
        return !this.indexOf(str);
    };
}

Puis j'ai dû faire ça :

var rowData = row.data();

var data = {};

for(var propertyName in rowData) {
    if(!propertyName.startsWith('jQuery'))
        data[propertyName] = rowData[propertyName];
}

5voto

Blender Points 114729

Vous pouvez appeler .data() sans arguments et il devrait retourner un objet avec tous les attributs de l'élément :

var row = $('#x'); // Won't work as your element's ID is invalid, but oh well.
var x = row.data();

Démonstration : http://jsfiddle.net/kYf3t/1/


Quelqu'un peut-il aider à retirer le __proto__ propriété ? Je ne peux pas la supprimer via delete x['__proto__'] .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X