通过捕获数据属性来创建对象数组

时间:2013-02-08 11:01:36

标签: jquery arrays collections

我做了一个小提琴。 http://jsfiddle.net/Zfaf6/

我正在体验数组,但似乎只输出第一个对象。

请任何建议,谢谢。

我的jquery

$("a.download-all").on('click', function () {

    var downloads = $('a[data-download]').attr('data-download');

    // This is the example output of the data in the variable...

    $('#varObj').html(downloads);

});


我的剧本

<div id="images">

    <a href="#" data-download="http://image.com/1.jpg"><img src="images/x.gif" alt=""/></a>
    <a href="#" data-download="http://image.com/2.jpg"><img src="images/x.gif" alt="" /></a>
    <a href="#" data-download="http://image.com/3.jpg"><img src="images/x.gif" alt=""/></a>
    <a href="#" data-download="http://image.com/4.jpg"><img src="images/x.gif" alt="" /></a>
    <a href="#" data-download="http://image.com/5.jpg"><img src="images/x.gif" alt=""/></a>
    <a href="#" data-download="http://image.com/6.jpg"><img src="images/x.gif" alt="" /></a>

<div>

<p><a href="#" class="download-all">Download all images</a></p>

<p id="varObj"></p>

http://jsfiddle.net/Zfaf6/

4 个答案:

答案 0 :(得分:5)

jQuery的attr()将作为“getter”(and per the docs)返回匹配的 first 元素的值;这就是为什么你只看到一个。

使用each()迭代匹配对象,或使用map();

$("a.download-all").on('click', function () {

    var downloads = $('a[data-download]').map(function () {
        return $(this).attr('data-download');
    });

    // This is the example output of the data in the variable...
    $('#varObj').html(downloads.get().join(' '));
});

答案 1 :(得分:1)

LIVE DEMO

var downloads = [] ;

$("a.download-all").on('click', function () {

    $('a[data-download]').each(function(){   
        downloads.push( $(this).attr('data-download') );        
    });

    $('#varObj').html(downloads);

});

答案 2 :(得分:1)

调用set的attr()只会返回第一个attr()。另外,请使用data(),因为它更容易阅读。

因此,代码只创建一个空数组,然后使用each我们将每个项的download值推送到数组中。其余代码是相同的。

$("a.download-all").on('click', function () 
{
    var downloads = [];

    $('a[data-download]').each(function()
    {
        downloads.push( $(this).data('download') );
    });

    // This is the example output of the data in the variable...

    $('#varObj').html(downloads);
});

答案 3 :(得分:1)

var downloads = $('a[data-download]').map(function(){   
   return  $(this).data('download');        
});
$("#varObj").html(downloads.join("-"));