将数组保存在数据属性中并使用JavaScript/jQuery检索它?

mlmc2os5  于 2023-10-17  发布在  jQuery
关注(0)|答案(2)|浏览(108)

我在按钮的数据属性中存储了一个数组。
数组成功存储,但由于某种原因,每次我试图访问存储在data属性中的数组时,我只得到数组的左括号,没有其他!
我就是不明白
这是我的代码:

var array = [{"note": "Hey I love you!",
    "full_name": "Sarah James",
    "date_added": "14 September 2022"
},{
    "note": "Hey I love you too!",
    "full_name": "Billy Smith",
    "date_added": "15 September 2022"
}];

var stringed = JSON.stringify(array);
 
 
 $('.o').append('<button data-test="'+stringed+'" class="viewTicketBtn">Click Here</button>');
 
 
 $(document).on('click', '.viewTicketBtn', function(){ 
 var str = $(this).attr('data-test');
console.log(str);
 
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>

<div class="o">

</div>

点击按钮,你会看到问题。
我做错了什么

goucqfw6

goucqfw61#

这个问题是因为你在HTML中使用了data属性。它只能存储字符串。您正确地使用了JSON.stringify()来解决这个问题,但是JSON中的"破坏了HTML格式。你可以转义HTML中的双引号,但有一个更简单的方法。
要解决这个问题,可以使用jQuery的data()方法来获取和设置值,因为这将自动保留对象结构。
下面是一个工作示例:

const array = [{
  "note": "Hey I love you!",
  "full_name": "Sarah James",
  "date_added": "14 September 2022"
}, {
  "note": "Hey I love you too!",
  "full_name": "Billy Smith",
  "date_added": "15 September 2022"
}];

$('<button class="viewTicketBtn">Click Here</button>').data('test', array).appendTo('.o');

$(document).on('click', '.viewTicketBtn', function() {
  const str = $(this).data('test');
  console.log(str);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>

<div class="o"></div>
mftmpeh8

mftmpeh82#

使用其他引号-我交换了'"来处理JSON坚持使用的双引号。
查看其他答案,了解直接将数组存储在data method中的jQuery方法

var array = [{"note": "Hey I love you!",
    "full_name": "Sarah James",
    "date_added": "14 September 2022"
},{
    "note": "I'm in love with you too!",
    "full_name": "Billy Smith",
    "date_added": "15 September 2022"
}];

var stringed = JSON.stringify(array).replace(/'/g,"&quot;"); // make sure there are no ' in the text.
console.log(stringed)
 
 $('.o').append("<button data-test='"+stringed+"' class='viewTicketBtn'>Click Here</button>");
 
 
 $(document).on('click', '.viewTicketBtn', function(){ 
 var str = $(this).attr('data-test');
alert(str);
 
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<div class="o"></div>

相关问题