var data = $("#foo").data("role");
data = eval('('+ data +')')
alert(data);

解决方案 »

  1.   

    Quote: 引用 1 楼 calmcrime 的回复:

    [code=javascript]var data = $("#foo").data("role");
    data = eval('('+ data +')')
    编译器报错了:
     eval('('+data+')'); --- eval is evil.
      

  2.   

    应该这样:
    $info = {name:"tom",age:22};
    $("body").html("<div id='foo'>111</div>");
    $("#foo").data('role',$info);
    var $data = $("#foo").data("role");
    alert($data.name);
      

  3.   

    属性不能设对象的。
    只是jQuery给人一个错觉。
      

  4.   

    咋没反应。
    要不这样
    info = {name:"tom",age:22};
    var $a = JSON.stringify(info);
    $("body").html("<div id='foo' data-role="+$a+">111</div>");
    var $data = $("#foo").data("role");
      

  5.   

    这个方法可以的,但是在ie7以下的浏览器会提示json未定义的错误,这样就要另外处理了
      

  6.   

    下载个json2吧,很小的
    https://github.com/douglascrockford/JSON-js/blob/master/json2.js
      

  7.   

    实际场景是这样的:
    info = [{name:"tom",age:22},{name:"jim",age:23}];
    var html = '';
    for (var i = 0;i<info.length;i++) {
      html +='<a href="javascript:;" class="J_edit" data-role='+info+'>edit</a>';
    }
    $("body").append(html);
    $(".J_edit").click(function() {
      var data = $(this).attr("data-role");
      alert(data.name);
    });
    比如点了第一个edit就可以获取到第一组的json的name,就是tom,点了第二个就是jim
      

  8.   

    关键是怎样把info = [{name:"tom",age:22},{name:"jim",age:23}];
    转化为字符串。如果info是json串,
    var $data = $("#foo").data("role");出来时jQuery会自动转换(用jQuery.parseJSON 也就是JSON.parse)
    如果不是还要手动处理。