2013-04-11 33 views
1

目前我正在使用下面的代码在文本框中输入用户进入的值。jquery - - 我如何简化代码

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手动取值。

我该如何轻松地做到这一点W/O重写代码?

+0

你的代码覆盖自己,你到底想要做什么? – smerny 2013-04-11 13:20:47

+2

你知道'class =“”'属性是什么,对吧? – Bojangles 2013-04-11 13:20:47

+1

也许更适合http://codereview.stackexchange.com。 – 2013-04-11 13:21:08

回答

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变量是对象的数组,你还可以添加类的表单元素,并通过他们的类名,而不是使用.eq方法选择它们。

3

要effecient,这将会是具有每个包含<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(); 
}); 
+0

个人喜好也许,但我认为'$(“div”)。each('看起来比将集合传递给'$ .each'更清洁一点。 – 2013-04-11 13:30:02

+0

是的,或者,根据喜好:) – 2013-04-11 13:33:41

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 
}); 
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(); 
}