jQuery - 从多个div中的不同类型的元素中获取数据

时间:2015-11-27 08:59:07

标签: jquery

考虑以下HTML块:

<div class="wrapper">
    <select>
        <option></option>
        <option></option>
        <option></option>
    </select>
    <input type="text">
</div>
<div class="wrapper">
    <select>
        <option></option>
        <option></option>
        <option></option>
    </select>
    <input type="text">
</div>

div with class&#34; wrapper&#34;包含多种类型的元素(选择,输入等......)我需要以

开头的东西
$('.wrapper').each(function () { 
   // code that collects select, input data
});

将数据放入多维数组([&#39;选择选项&#39;,&#39;输入数据&#39;])。

正如Rory McCrossan在他接受的答案中指出的那样,我的意思是我需要一个对象数组,而不是一个多维数组。

4 个答案:

答案 0 :(得分:3)

您可以使用:input选择器:

var values = {};
$('.wrapper :input').each(function () { 
    values[$(this).prop('name')] = $(this).val();
});
  

:输入
  选择所有输入,textarea,select和按钮元素。

jQuery docs

:input的更多信息

根据您的评论,您需要将数据作为对象数组(请注意,这与多维数组不同)。要实现这一点,您需要两个循环。一个用于覆盖.wrapper元素,另一个用于查找其中的:input元素。试试这个:

var values = [];
$('.wrapper').each(function () { 
    var wrapperValues = {};
    $(this).find(':input').each(function() {
        wrapperValues[$(this).prop('name')] = $(this).val();
    });
    values.push(wrapperValues);
});

答案 1 :(得分:0)

你可以使用这样的东西。

var finalVal = [];
$('.wrapper').each(function () { 
   $("input, select, textarea").each(function () {
       finalVal.push($(this).val());
   });
});

答案 2 :(得分:0)

&#13;
&#13;
var arr = [];
$('.wrapper').children().each(function () { 
   // code that collects select, input data
  arr.push($(this).val());
});

$('#value').html(arr)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="wrapper">
    <select>
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <input type="text" value='12'>
</div>
<div class="wrapper">
    <select>
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <input type="text" value='34'>
</div>
<div id='value'></div>
&#13;
&#13;
&#13;

尝试这种方式使用.children()

  

描述:获取匹配元素集中每个元素的子元素,可选择通过选择器进行过滤。

答案 3 :(得分:0)

imho最简单的方法是将包装元素中的所有输入都塞满:

var datas = $('.wrapper').find(':input').attr('name', function(){
    return this.nodeName.toLowerCase();
}).serializeArray();

但是假设您没有为这些输入指定属性名称,并且您不想覆盖它。