【问题标题】:jQuery .each() with Array带有数组的 jQuery .each()
【发布时间】:2011-03-01 18:54:22
【问题描述】:

基本上,我试图收集具有特定类的每个元素的 ID,并将这些 ID 放入一个数组中。我正在使用 jQuery 1.4.1 并尝试使用 .each(),但不太了解它或如何将数组从函数中传递出去。

$('a#submitarray').click(function(){

    var datearray = new Array();

    $('.selected').each(function(){
        datearray.push($(this).attr('id'));
    });

    // AJAX code to send datearray to process.php file

});

我确定我已经走了,因为我在这方面还很陌生,所以任何建议帮助都会很棒。谢谢!

【问题讨论】:

  • 如果 AJAX 调用是 inside 处理程序,这应该是正确的。如果您正在调用另一个函数,则需要将 datearray 作为参数传递,或者只是在处理程序之外创建变量。请参阅下面的答案。

标签: jquery arrays each


【解决方案1】:

你也可以使用map()

$('a#submitarray').click(function(){

  var datearray = $('selected').map(function(_, elem) {
    return elem.id;
  }).get(); // edited to add ".get()" at the end; thanks @patrick
  // ajax

});

map() 方法将每个索引(我的示例未使用)和元素传递给给定函数,并根据返回值为您构建一个数组。

【讨论】:

  • @Pointy - 我喜欢map()!只是不要忘记在最后链接.get(),否则datearray 将包含一个jQuery 对象而不仅仅是数组。
  • 哦,对;谢谢@patrick!你不希望 jQuery 在核心中也有一个“减少”吗?
  • @Pointy - 你知道,我唯一一次遇到(或考虑过)reduce 是在我稍微修改一下 CouchDB 的时候。这是一个有趣的功能。
  • 示例:如果您想要“id”到“value”的映射怎么办?使用“reduce”,它就像这个地图示例,除了你从{} 开始并为每个元素添加映射。使用 Prototype,您很快就会习惯它,并且可以简化很多情况。
  • @Pointy - 不错。我只是在网上看了几个例子。所以传递的第一个参数是{},并且每次迭代都会更新它?或者您是否在reduce 回调之外创建一个变量,然后像使用each() 一样对其进行更新?
【解决方案2】:

试试jquery的map函数:

datearray = $('.selected').map(function(){
    return $(this).attr('id');
}).get();

// use ajax to send datearray

【讨论】:

  • 第一行代码= new Array()是不必要的。第二条语句替换了数组。
  • 我给 Pointy 的评论相同。如果你不在.map() 的末尾链接.get()datearray 将包含一个jQuery 对象,而不仅仅是它的数组。
【解决方案3】:

您不必将数组传递给匿名函数,因为它位于同一范围内。

【讨论】:

  • 这是真的。在另一个函数中创建的任何函数都具有包含函数变量的范围。因此,在每次运行之后,您将拥有 datearray 中的数据,您可以将 datearray 传递给您的 ajax 函数。
【解决方案4】:

在其他答案的基础上,这是一个简化版本:

var datearray = $('selected').map(function() {
  return this.id;
}).get();

map 函数从每个元素中获取 id,get 函数返回一个数组。在传递给map 的匿名函数中,this 依次引用每个选定的元素。

【讨论】:

    【解决方案5】:

    对我来说一切都很好,数组将被填充并在您放置评论的地方可用。对自己有信心。

    【讨论】:

      【解决方案6】:

      数组应该被加载;您可以使用jQuery.post将其发送到服务器...

      $.post("process.php", datearray, function(dat) {
        alert('Response: ' + dat);
      });
      

      【讨论】:

        猜你喜欢
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2018-06-29
        • 2011-11-18
        相关资源
        最近更新 更多