考虑以下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在他接受的答案中指出的那样,我的意思是我需要一个对象数组,而不是一个多维数组。
答案 0 :(得分:3)
您可以使用:input
选择器:
var values = {};
$('.wrapper :input').each(function () {
values[$(this).prop('name')] = $(this).val();
});
中:输入
选择所有输入,textarea,select和按钮元素。
: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)
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;
尝试这种方式使用.children()
描述:获取匹配元素集中每个元素的子元素,可选择通过选择器进行过滤。
答案 3 :(得分:0)
imho最简单的方法是将包装元素中的所有输入都塞满:
var datas = $('.wrapper').find(':input').attr('name', function(){
return this.nodeName.toLowerCase();
}).serializeArray();
但是假设您没有为这些输入指定属性名称,并且您不想覆盖它。