1

目前正在获取用户在文本框中输入的值,使用下面的代码下拉。

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

4 回答 4

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();
});
于 2013-04-11T13:23:07.357 回答
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方法来选择它们。

于 2013-04-11T13:24:12.160 回答
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
});
于 2013-04-11T13:24:03.547 回答
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();
}
于 2013-04-11T13:25:30.423 回答