使用jQuery map()与多种类型的表单元素

我正在构建一个多步骤的联系表单(每一步都在一个文章标签中),我使用jQuery map()将标签和输入值存储到一个数组中,然后在表单的最后一部分,信息被展示。 存储数组的jQuery是这样的:

 $("article:last").prev().find("a.next").on("click", function(){ var arr = $('.form-item').map(function() { var lab = $('label', this).text(); var val = $('input', this).val(); return "
  • " + lab + " " + val + "
  • "; }).get() $("article:last ul#results").append(arr.join('')) });

    这很好用,但对textareas和select菜单返回“undefined”,这是正确的。 我需要调整此代码以适用于选择项和textareas。 我的HTML非常简单,如下所示:

     

    每篇文章都代表了表单的新部分。 所以问题是,如何调整我的jQuery以支持其他表单元素? 做一个有条件的说法,“如果.form-item的孩子包含textarea,运行这个代码……等等,这是一个不错的选择。

    您可以使用:eq()选择器, eq(1)选择div标签的第二个子节点,输入或textarea元素。

     var arr = $('.form-item').map(function() { var lab = $('label', this).text(); var val = $(':eq(1)', this).val(); return "
  • " + lab + " " + val + "
  • "; }).get()

    http://jsfiddle.net/bFumx/

    你可以写这样的东西:

     ​var arr = $('.form-item').map(function() { var val = $(this).find('input, textarea').val(); return val; }).get();​​​​​​​​​​​ 

    关于JSFiddle的实例