【问题标题】:Create an array of objects by capturing a data attribute通过捕获数据属性创建对象数组
【发布时间】:2013-02-08 11:01:36
【问题描述】:

我做了一个小提琴。 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/

【问题讨论】:

    标签: jquery arrays collections


    【解决方案1】:

    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(' '));
    });
    

    【讨论】:

    • 我认为 map() 非常适合这种情况。
    • 好!不敢相信我没有想到地图。
    【解决方案2】:

    LIVE DEMO

    var downloads = [] ;
    
    $("a.download-all").on('click', function () {
    
        $('a[data-download]').each(function(){   
            downloads.push( $(this).attr('data-download') );        
        });
    
        $('#varObj').html(downloads);
    
    });
    

    【讨论】:

      【解决方案3】:

      调用 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);
      });
      

      【讨论】:

      • 也谢谢。还有关于数据的提示,永远忘记它。
      • 和更新我的标题:-)
      【解决方案4】:
      var downloads = $('a[data-download]').map(function(){   
         return  $(this).data('download');        
      });
      $("#varObj").html(downloads.join("-"));
      

      【讨论】:

      • 你把我最喜欢的答案剪得更小了!
      • 虽然有点奇怪 - 由于某种原因无法正常工作...jsfiddle.net/Zfaf6/4
      • 错字:download') ) 额外括号
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2019-05-29
      • 2013-06-06
      • 2014-01-26
      相关资源
      最近更新 更多