【问题标题】:Serialize data-attributes序列化数据属性
【发布时间】:2015-09-04 05:40:08
【问题描述】:

我有一个拖放系统,每个拖放的项目都会收到三个数据属性。

  • 数据ID
  • 数据顺序
  • 数据内容

现在我应该将这些属性放入一个多维数组中。它应该是这样的:

data-order = "0" [data-id = "1", data-content = "blabla"]; data-order = "1" [data-id = "2", data-content = "another content"];

但我不知道如何实现这一点。还没有在 jQuery 中使用数组。

感谢您的帮助!

这是我一直在尝试的,但没有成功:

<li class="dropped" data-order="0" data-id="1" data-content="blabla"></li>
<li class="dropped" data-order="0" data-id="2" data-content="another content"></li>

$(".send").click(function() {

    var itterate = $(".dropped");
    var data_array = new Array();

    for (var i in itterate.data()) {

        var sub_array = new Array();
        sub_array['data-order'] = i;
        sub_array['data-id'] = itterate.data()[i];
        sub_array['data-content'] = itterate.data([i]);

        data_array.push(sub_array);

    }

    var serialized = $.param(itterate.serializeArray().concat(data_array));

    $("#result").text(serialized);

});

这是jsfiddle

【问题讨论】:

  • 我可以问一下这段代码到底有什么不工作的吗?你能提供一个jsFiddle吗?
  • 代码中的i 包含值orderidcontent,而不是每个项目。您实际上是在循环数据类型而不是 li 项目本身。

标签: jquery arrays serialization multidimensional-array


【解决方案1】:

http://jsfiddle.net/hk120Lhq/1/

$(".send").click(function() {

    var data_array = new Array();
    $(".dropped").each(function(){

        var item = {};
        item['data-order'] = $(this).data('order');
        item['data-id'] = $(this).data('id');
        item['data-content'] = $(this).data('content');

        data_array.push(item);

    });
    var serialized = JSON.stringify(data_array);

    $("#result").text(serialized);

});

所以.each 与您尝试执行的循环相同。我不确定你在循环中做了什么,但我认为这就是你想要的结果。

进一步简化:http://jsfiddle.net/hk120Lhq/3/

如果您只是想从您的 li 中获取所有数据属性并且不确定会有多少或它们将被称为什么,请执行以下操作:http://jsfiddle.net/hk120Lhq/4/

$(".send").click(function() {

    var data_array = new Array();
    $(".dropped").each(function(){
        var item = {};
        for(var i in $(this).data()){
            item[i] = $(this).data(i);
        }
        data_array.push(item);

    });
    var serialized = JSON.stringify(data_array);

    $("#result").text(serialized);

});

【讨论】:

  • 谢谢,这正是我想要的!事实上,我找到了一个更简单的解决方案来解决我需要做的事情:我创建了 2 个数组:1 个用于日期,一个用于内容。因为索引总是相同的(0, 1, 2, 3, ...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
相关资源
最近更新 更多