toArray()并保留数据属性

时间:2018-03-22 18:39:20

标签: jquery

如何使用jQuery传递元素数组以及保留data属性?目前我有以下内容:

$('body').on('click', '.selectItem', function() {
    data: {
        'hash': $(this).data("hash"),
        'id': $(this).data("id"),
        'inspect': $(this).data("inspect"),
        'stickers': $(this).data("stickers")
    }
});

我怎么能这样做?

$('.getItems').click(function(event) {
    data: {
        'items': $('.selectItem').andAttributes().toArray()
    }
});

我猜我可以做foreach&然后将它们添加到每个元素的数组中,但jQuery没有一个简单的解决方案吗?

我做 {/ em> $('.selectItem').andAttributes().toArray()之类的预期结果将是这样的:

{
    0: {
        'hash': $(this).data("hash"),
        'id': $(this).data("id"),
        'inspect': $(this).data("inspect"),
        'stickers': $(this).data("stickers")
    },
    1: {
        'hash': $(this).data("hash"),
        'id': $(this).data("id"),
        'inspect': $(this).data("inspect"),
        'stickers': $(this).data("stickers")
    }
    2: {
        'hash': $(this).data("hash"),
        'id': $(this).data("id"),
        'inspect': $(this).data("inspect"),
        'stickers': $(this).data("stickers")
    }
    etc....
}

2 个答案:

答案 0 :(得分:2)

您可能正在寻找map(jQuery' s,而不是数组' s)与get相结合(以获得实际数组)。您还可以使用data的无参数版本来获取从以下位置选择这些属性的对象:

var a = $(/*...selector for elements...*/).map(function() {
    var data = $(this).data(); // Get the data as an object
    // Grab the properties from it you want
    return {
        'hash': data.hash,
        'id': data.id,
        'inspect': data.inspect,
        'stickers': data.stickers
    }
}).get();

a将是一个包含属性hashid等的对象数组。

(顺便说一下:无需将这些属性名称放在引号中。)

实例(只有几个attrs)



var a = $(".stuff").map(function() {
    var data = $(this).data();
    return {
        hash: data.hash,
        id: data.id/*,
        inspect: data.inspect,
        stickers: data.stickers*/
    }
}).get();
console.log(a);

.as-console-wrapper {
  max-height: 100% !important;
}

<div class="stuff" data-id="one" data-hash="hash one"></div>
<div class="stuff" data-id="two" data-hash="hash two"></div>
<div class="stuff" data-id="three" data-hash="hash three"></div>
<div class="stuff" data-id="four" data-hash="hash four"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

不带参数的.data()方法将返回包含所有数据属性的对象。使用.map()迭代匹配选择器的所有元素,并.get()将结果集合转换为数组。

data: $('.selectItem').map(function() {
    return $(this).data();
}).get()