我有一个带有两个固定输入元素的表单,后跟任意数量的动态创建的元素,这些元素的名称属性值都带有相同的字符串后缀(请参阅代码片段)。我试图获得一组 jQuery 对象,每个输入元素对应一个。
但是,当我连接一个包含表示前两个元素的对象的 2 元素数组和一个包含其余元素的对象的 3 元素数组时,结果只是一个包含第一个数组的数组对象,只有一个额外元素包含第二个数组的对象作为数组,这不是我理解的concat
工作方式。
我希望新数组是一个五元素数组,其中包含代表前两个固定输入的 jQuery 对象,然后是其余的。
忽略这是否是解决当前问题的正确方法(很可能不是):我的期望是否错误,有人可以解释为什么 concat
会产生这个结果吗?
var firstTwoFields = [
$('[name=field1]'),
$('[name=field2]')
];
var otherFields = $('[name$=test]').map(function() { return $(this); });
var newArray = firstTwoFields.concat(otherFields);
document.write('firstTwoFields.length: ' + firstTwoFields.length + '<br>');
document.write('otherFields.length: ' + otherFields.length + '<br>');
document.write('newArray.length: ' + newArray.length + '<br>');
document.write('newArray[2].length: ' + newArray[2].length + '<br>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input name="field1" value="" /><br>
<input name="field2" value="" /><br>
<input name="field3_test" value="" /><br>
<input name="field4_test" value="" /><br>
<input name="field5_test" value="" /><br>
<br>
最佳答案
$().map()
将返回类似于数组的 jQuery 对象并且具有长度
,但是不是' t 一个可以使用 Array.prototype 方法的正确数组。
您需要使用get()
返回正确的数组,或者使用$.map()
:
var otherFields = $('[name$=test]').map(function() { return $(this); }).get();
使用$.map()
:
var otherFields = $.map( $('[name$=test]'), function(elem) { return $(elem); })
引用:get() docs
关于javascript - 为什么 Array.concat 在连接 jQuery 对象的二元素和三元素数组时会生成三元素数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783911/