如何向已经包含某些元素的jQuery对象添加新元素

如何向已经包含某些元素的jQuery对象添加新元素,jquery,Jquery,supplieritemdata是我的对象,data是一个数组。我想将元素添加到对象中,因为复选框被选中为true 我的问题是,对象只保存最后提供给它的值,而不是所有的值。我想存储所有的值 var supplieritemdata={}, 数据=[]; $('#tbl1>tbody>tr')。每个(函数(索引,tr){ 调试器 //var行=$(此).tr; var ch=$(this.find(.check”).prop(“checked”); 如果(ch){ supplieritemdata

supplieritemdata
是我的对象,
data
是一个数组。我想将元素添加到对象中,因为复选框被选中为true

我的问题是,对象只保存最后提供给它的值,而不是所有的值。我想存储所有的值

var supplieritemdata={},
数据=[];
$('#tbl1>tbody>tr')。每个(函数(索引,tr){
调试器
//var行=$(此).tr;
var ch=$(this.find(.check”).prop(“checked”);
如果(ch){
supplieritemdata.SupplierId=$('#ddlsupplierdetails').val();
supplieritemdata.ItemCategoryId=$(“#ddlcontegory”).val();
supplieritemdata.ItemGroupId=$('#ddlgroup').val();
supplieritemdata.ItemId=$(this.find(“.label info”).html();
}
数据推送(supplieritemdata);
//supplieritemdata=null;
//$(此).prop(“选中”)
//$this.find(“input.name”).val();
});

问题是因为您在迭代中修改了对
supplieritemdata
的相同引用。这意味着,尽管您已将该变量添加到
数据
数组中,但将其设置为
null
,或更新其属性将影响数组中保存的实例。因此,在循环的每次迭代中都会覆盖单个对象的属性。这就是为什么只显示最后的值

要解决这个问题,您需要在循环的每个迭代中创建一个新对象

还要注意的是,通过使用
map()
,仅选择带有复选框的
tr
元素(以消除对
if
)和als的需要),可以使逻辑更加简洁。试试这个:

var data=$('#tbl1>tbody>tr:has(:checkbox:checked)')。映射(函数(){
返回{
SupplierId:$('#ddlsupplierdetails').val(),
ItemCategoryId:$('#ddlcontegory').val(),
ItemGroupId:$('#ddlgroup').val(),
ItemId:$(this.find(“.label info”).html()
}
}).get();
控制台日志(数据)

富吧1
富吧2
富吧3

我正在试验supplieritemdata=null。因此,它可以保存新值,但这会生成错误。请不要添加不相关的标记。我已经删除了“asp.net mvc”,原因是它与客户端JS问题毫无关系。太好了,非常感谢。现在我可以使用ajaxOne发送数据数组了吗?更多帮助如何提高我的jquery技能,因为我是jquery的初学者。请继续练习:)我建议您通读文档:。从名称上看,大多数方法的用途都很清楚。现在使用上面的jquery代码,我想将数据发送给我的控制器,这样做,但在控制器中,它传递的是null值$.ajax({url:url,traditional:true,contentType:'application/json;charset=utf-8',数据类型:“json”,数据:{model:json.stringify(data)},缓存:false,类型:“POST”,成功:函数(data){debugger$('#submitdata').show();}});