【问题标题】:.data() returns string when table needed.data() 在需要表时返回字符串
【发布时间】:2021-11-22 23:59:38
【问题描述】:

在我的 html 中,我有一个表格: <table id="table" data-keys="{{keys}}"> 其中keys 是一个数组(我后来成功调用 {% for k in keys %})。

但是当我在我的 js 中调用时: $("#table").data("keys") 结果是字符串: "['', 'Value1', 'Value2', 'Value3']" 有什么聪明的办法可以实际获取表格,还是我只需要自己解析字符串并转换它?

【问题讨论】:

  • HTML 属性不存储数组或对象,只存储字符串
  • 所以答案是:不,您无能为力。谢谢你:)
  • @JeremyThille 这对于$(..).attr("data-item") 是正确的-> 始终是一个字符串。 然而 $(..).data("item") 尝试将属性字符串强制转换为正确的数据类型(例如数字)。 (所以是的,它们被存储为字符串,所以“其中键是一个数组”是不正确的,因为它是一个字符串)
  • @freedomn-m 啊,这很有可能。我的 jQuery 有点生疏了
  • @JeremyThille 更新了我的评论 - 你是对的,他们只存储字符串

标签: javascript html jquery jinja2


【解决方案1】:

您必须使用双引号使字符串成为有效的 JSON。然后它会被 jQuery 自动解析。

const a = $('#a').data("keys");
const b = $('#b').data("keys");

console.log(typeof a, a)
console.log(typeof b, b)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="a" data-keys='["", "a", "b", "c"]'></div>
<div id="b" data-keys="['', 'a', 'b', 'c']"></div>

https://api.jquery.com/data/

每次尝试都将属性的字符串值转换为 JavaScript 值(包括布尔值、数字、对象、数组和 null) [...] 当字符串以'{'或'['开头时,则使用jQuery.parseJSON对其进行解析;它必须遵循有效的 JSON 语法,包括引用的属性名称。无法解析为 JavaScript 值的字符串不会被转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多