Jquery - - 我如何简化代码

时间:2013-04-11 13:18:39

标签: jquery html

目前正在使用以下代码下载文本框中的用户值。

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手动获取值都没有意义。

如何在不重写代码的情况下轻松完成此操作?

4 个答案:

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