【问题标题】:Attempting to array table data attr contents using each尝试使用每个数组表数据 attr 内容
【发布时间】:2014-04-28 23:44:30
【问题描述】:

我正在尝试将表的内容获取到数组中,其中每个 tr 具有 html5 自定义数据属性,并且这些值是插入到数组中的值,其中行分别对应于数组。

我尝试了以下方法: JSfiddle

var data = Array();

$("table tr").each(function(i, v){
    data[i] = Array();
    $(this).data().each(function(ii, vv){
        data[i][ii] = $(this).text();
    }); 
});

alert(data);

但这不起作用。

【问题讨论】:

  • 这么多错误:你不能在没有参数的情况下调用data(),你必须提供属性名称。它返回一个字符串,而不是一个数组。 .text() 仅适用于 DOM 元素的 jQuery 对象,不适用于普通对象。
  • @Barmar 其实你可以不带参数地调用data() here is the documentation on it
  • 另外,您不能使用Array() 来初始化数组,它可以是new Array()[],后者是首选。

标签: jquery arrays each


【解决方案1】:

我想我现在明白你的问题了,以下代码从 trs 上的数据属性中获取值并将它们添加到数组中。

var data = [];

$("table tr").each(function (i, v) {
    data[i] = [];
    var count = 0;
    var item = $(this).data();
    for(var propertyName in item) {
       data[i][count] = item[propertyName];
       count++;
   }
});
console.log(data);

小提琴: http://jsfiddle.net/KyleMuir/vG36j/13/

【讨论】:

  • 使用for-in 循环时,您应该测试hasOwnProperty 以跳过继承的属性。
  • 同意,但是对象是$(this).data(),所以我看不出它会如何继承任何属性?
  • 正是我想要达到的目标。我尝试了大约 6 种不同的方法,但这正是我的目标。谢谢
  • 我的错误,当我在控制台中查看它时,我以为我看到了其他属性。
  • 请注意,此解决方案仅显示没有任何名称的数据值。而且它们的顺序是完全不可预测的。
【解决方案2】:

您可能想要一个对象,而不是数组。以下是你应该如何去做:

var data = [];

$("table tr").each(function(i, v){
    data[i] = {};
    $.each($(this).data(), function(ii, vv) {
        data[i][ii] = vv;
    }); 
});

【讨论】:

    【解决方案3】:

    data() 返回一个对象,而不是一个数组,因此您不能使用each() 方法对其进行迭代。您可以使用$.each 对其进行循环,但没有必要这样做——您可以简单地将整个对象直接放入data[i]

    var data = [];
    
    $("table tr").each(function(i, v){
        data[i] = $(this).data(); 
    });
    
    console.log(data);
    

    我最后使用了console.log(),因为alert() 不显示对象的内容。

    DEMO

    【讨论】:

    • .data() 返回一个对象,您可以枚举该对象以从中提取属性。
    • 这不是我说的吗? .data().each() 不适用于对象,它仅适用于数组。 $.each($(this).data(), ...) 会起作用。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2018-10-27
    • 1970-01-01
    • 2014-08-17
    • 2017-05-03
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多