2013-04-11 67 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(); 
}