2011-12-14 4 views
2

Скажем, у меня есть этоткак превратить HTML атрибутов данных в JSON

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

в JQuery я могу получить данные, как так

var row = $('#x') 

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

это будет способ удобнее, если бы я мог сделать что-то вроде это

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

Кто-нибудь знает, как это сделать?

EDIT:

Я забыл упомянуть, что уаг х = row.data() будет делать эту работу, но есть все это JQuery барахло там.

Я хочу отправить данные как часть запроса ajax, как только у меня получится.

например,

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: Мой 'Рабочий' Решение

Я получил это работает, убивая JQuery {некоторое число} вещь из данных объекта

первый я это от here

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

Тогда я должен был сделать это:

var rowData = row.data(); 

var data = {}; 

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

Можете ли вы подробнее рассказать о том, что вы подразумеваете под «это не работает»? – Blender

+1

должен быть 'id =" x "' not 'id =" # x "' – zzzzBov

+0

не работает == когда событие click запускается (используя chrome btw) вместо POSTing в deleteAction Uri с данными в POST-страница, в которую входит страница, и бесконечный цикл, переиздающий событие POST. – Peter

ответ

5

Вы можете вызвать .data() без аргументов, и он должен возвращать объект со всеми атрибутами элемента:

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

Демо: http://jsfiddle.net/kYf3t/1/


Может кто-нибудь помочь удалить __proto__ недвижимость? Я не могу удалить его через delete x['__proto__'].

+0

да, я понял, что мой вопрос не совсем объяснил, в чем моя проблема ... см. Править. – Peter

+0

__proto__ не проблема. есть свойство jQuery, которое вызывает проблемы ... см. мои изменения – Peter

Смежные вопросы