目前正在使用以下代码下载文本框中的用户值。
var test = new Object();
test.attribute = $("#Attribute_0").val();
test.operand = $("#Operand_0").val();
test.value = $("#Value_0").val();
var test = new Object();
test.attribute = $("#Attribute_1").val();
test.operand = $("#Operand_1").val();
test.value = $("#Value_1").val();
但是随着名单的增长,我认为还有其他更好的方法,所以我来到这里。
我的HTML代码如下所示
<div>
<input id="Attribute_0" name="Attribute_1" type="text">
<select id="Operand_0">
<input id="Value_0" type="text">
</div>
<div>
<input id="Attribute_1" name="Attribute_1" type="text">
<select id="Operand_1">
<input id="Value_1" type="text">
</div>
我能用一些foreach或其他更好的方法简化我的代码吗?
请建议
雅我的代码正在重复。
假设我有10个这样的列表属性,那么为每个DIV手动获取值都没有意义。
如何在不重写代码的情况下轻松完成此操作?
答案 0 :(得分:3)
为了提高效率,最好在每个包含<div>
的帖子上安排一个课程并在此课程上执行$.each
,但是使用您当前的代码可以做到:
$.each($('div'), function(i, v) {
var test = new Object();
test.attribute = $("#Attribute_" + i).val();
test.operand = $("#Operand_" + i).val();
test.value = $("#Value_" + i).val();
});
答案 1 :(得分:2)
您可以使用map
方法。
var data = $('div.classname').map(function() {
var $elems = $(this).children();
return {
attribute: $elems.eq(0).val(),
operand: $elems.eq(1).val(),
value: $elems.eq(2).val()
}
}).get();
现在data
变量是一个对象数组,您还可以向表单元素添加类,并通过classNames选择它们,而不是使用.eq
方法。
答案 2 :(得分:1)
如果您愿意更改自己的HTML,可以执行以下操作:
<div class="item">
<input class="Attribute" name="Attribute_0" type="text">
<select class="Operand">
<input class="Value" type="text">
</div>
<div class="item">
<input class="Attribute" name="Attribute_1" type="text">
<select class="Operand">
<input class="Value" type="text">
</div>
这将允许您这样做:
$(".item").each(function(){
var $item = $(this);
var test = new Object();
test.attribute = $item.find(".Attribute").val();
test.operand = $item.find(".Operand").val();
test.value = $item.find(".Value").val();
// do stuff with test
});
答案 3 :(得分:1)
您可以为标记名称组织foreach循环。像这样:
for(int i=0;i<maxvalue; i++){
var test = new Object();
test.attribute = $("#Attribute_" + i).val();
test.operand = $("#Operand_"+ i).val();
test.value = $("#Value_"+ i).val();
}