如何将HTML数据属性为JSON

问题描述:

说我有这个如何将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(); 

任何人都知道如何做到这一点?

编辑:

我忘了提,VAR X = 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); 
         } 
        }); 
       } 
} 

编辑:我的 '工作' 解决方案

我把它杀死了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 2011-12-14 00:40:10

+1

应该是'id =“x”`not`id =“#x”` – zzzzBov 2011-12-14 00:42:41

您可以致电.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__']将其删除。