将对象存储在div中并通过Jquery检索

问题描述 投票:0回答:2

我需要将一个Javascript对象存储到div(或生产中:许多div)。它真的需要进入data-object=""属性 - 我不想稍后通过$('div').data('object')添加它。

下面的代码只返回"{" ...我觉得我已经尝试过stringify和parse以及诸如此类的各种组合。

有没有人知道如何检索我的对象?

var Module = {
  
  div: function() {
    
    var object = {
      name: 'one',
      type: 'two'
    };
    
    var html = '<div data-object="' + JSON.stringify(object) + '"></div>';
    
    var div = $(html).appendTo('body');
      
    // This just returns "{" instead of my object
    console.log(div.data('object'));
    
  }
  
}


$(document).click(function() {
  Module.div();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
javascript jquery html json object
2个回答
0
投票

替换var html = '<div data-object="' + JSON.stringify(object) + '"></div>'; 随着var html = '<div data-object=' + JSON.stringify(object) + '></div>'; 无需添加额外的双引号

var Module = {
  
  div: function() {
    
    var object = {
      name: 'one',
      type: 'two'
    };
    
    var html = '<div data-object=' + JSON.stringify(object) + '></div>';
    
    var div = $(html).appendTo('body');
      
    // This just returns "{" instead of my object
    console.log(div.data('object'));
    
  }
  
}


$(document).click(function() {
  Module.div();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
</body>

2
投票

这是因为JSON使用双引号"进行编码,并且您还将它封装在双引号之间。这个问题是它产生:

<div data-object="{" name":"one","type":"two"}"></div>

所以,当你阅读data-object时,它的价值实际上是"{"

尝试将其封装成简单的引号:

var Module = {
  
  div: function() {
    
    var object = {
      name: 'one',
      type: 'two'
    };
    
    var html = "<div data-object='" + JSON.stringify(object) + "'></div>";
    
    var div = $(html).appendTo('body');
      
    // This just returns "{" instead of my object
    console.log(div.data('object'));
    
  }
  
}


$(document).click(function() {
  Module.div();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

现在输出有效:

<div data-object='{"name":"one","type":"two"}' ></div>

您还可以使用jQuery以编程方式设置属性:

var Module = {
  div: function() {
    var object = {
      name: 'one',
      type: 'two'
    };
    
    var div = $("<div>")
               .attr("data-object", JSON.stringify(object))
               .appendTo('body');
      
    console.log(div.data('object'));
  }
}


$(document).click(function() {
  Module.div();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.