【问题标题】:What is the correct way to handle this data using jQuery?使用 jQuery 处理这些数据的正确方法是什么?
【发布时间】:2019-08-22 13:49:10
【问题描述】:

我有一个带有数据属性的 html 元素列表,我想将其组装成一个 jQuery 对象并操作值。

each 循环中动态添加它们以便我可以轻松访问数据的最佳方法是:data.namedata.name.prop

我希望所有命名约定都是动态的并基于数据。

我的代码基于此处的最佳答案:How to create dynamically named JavaScript object properties?

到目前为止我有:

$('.licences-list .data div').each(function(index) { 
    var data = {}
    cats[$(this).find('p').data('cat')] = $(this).find('p').data('catname')
    cats.push(data)
})

但是当我尝试遍历 data 数组时,如下所示:

$.each(cats, function(key, value){
    $('<div class="card"><p>'+value+'</p></div>').appendTo('#commercial-licenses');
});

我刚刚得到[object Object] 输出...我不知道为什么!

【问题讨论】:

  • console.log(value); 在您的 $.each 循环中显示什么?
  • 你能给我们html以便我们尝试重新创建它吗?

标签: javascript jquery arrays object


【解决方案1】:
var data = {}
    cats[$(this).find('p').data('cat')] = $(this).find('p').data('catname')

每次循环时,实际上只是将一个空对象(数据)添加到数组(猫)中。然后,您将一个命名属性分配给 $.each 不知道的数组(猫)(它会忽略它们,因为它正在迭代实际数组)。

我的猜测是您想要一个类似于以下内容的对象映射:var cats = { "f1": "feline 1", "f2": "feline" };

在这种情况下,你想要的是:

var cats = {};
$('.licences-list .data div').each(function(index) { 
    cats[$(this).find('p').data('cat')] = $(this).find('p').data('catname')
})

如果您想要一个包含更多值的数组,而不仅仅是字符串(或您添加到元素中的任何数据),您每次都创建新对象并将它们附加到 cat 数组中:

var cats = [];
$('.licences-list .data div').each(function(index) { 
    cats.push({
       'id': $(this).find('p').data('cat'),
       'name':  $(this).find('p').data('catname')
    });
})

这将为您提供一个数组,您可以在上面使用 $.each,并使用以下方法访问值:value.id、value.name

【讨论】:

  • 非常感谢。我认为你是正确的地图是要走的路。唯一的问题是我希望根据示例中 div 的数据属性的名称动态命名键。像 data-cat="category1"data-catname="Category 1" 这样的东西我可以用作 cats.catcats.catname -- 或者差不多。
  • 在您的代码中,猫是一个数组,所以我假设您实际上是指其中包含的单个猫。既然如此,请参阅此处stackoverflow.com/questions/14645806/… 了解如何获取所有属性。或者,您可以只使用一个属性并将其中的数据编码为 JSON。这具有键入和分层信息的好处。
【解决方案2】:

不要过于复杂。

$('.div').attr('data-attribute', 'data-value');

使用您的示例:

$('.licences-list .data div').attr('attribute-name', 'attribute-value');

【讨论】:

  • 实际上你让我想到了,我可以操纵元素而不是操纵数据。我仍然真的很想知道使用 jQuery 对象做这种事情的正确方法——我经常遇到同样的问题。不过感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2021-07-06
  • 1970-01-01
相关资源
最近更新 更多