Jquery .each ---如果值不以0开头

时间:2013-05-16 07:44:14

标签: jquery html

尝试使用以下代码

在UI中获取用户输入的值
$.each($('item'), function(i, v) {
  var test = new Object();
  test.attribute = $("#Attribute_" + i).val();
  test.operand = $("#Operand_" + i).val();
  test.value = $("#Value_" + i).val();
});

我的HTML代码

<div class="item">
    <input id="Attribute_0" name="Attribute_1" type="text">
    <select id="Operand_0">
    <input id="Value_0" type="text">
</div>

    <div class="item">
        <input id="Attribute_1" name="Attribute_1" type="text">
        <select id="Operand_1">
        <input id="Value_1" type="text">
    </div>

只要我的Id以0 (Attribute_0,Operand_0).

开头,一切正常

但如果以1或更高的值开头,则上述功能不起作用,因为.each i值从0开始。

如果HTML开始像

 <div class="item">
                <input id="Attribute_1" name="Attribute_1" type="text">
                <select id="Operand_1">
                <input id="Value_1" type="text">
            </div>

我正在努力

可能有很多其他方法来获取值,但目前我实现了这一点,并希望通过一些修改坚持使用相同的代码。

我该如何处理?

由于

3 个答案:

答案 0 :(得分:3)

更改HTML以使用类而不是ID:

<div class="item">
    <input class="attribute" name="Attribute_1" type="text">
    <select class="operand">
    <input class="value" type="text">
</div>

然后使用类选择器+ .children来获取对当前.item内元素的引用:

$('.item').each(function() {
  var $this = $(this);
  var test = {
    attribute: $this.children('.attribute').val(),
    operand: $this.children('.operand').val(),
    value = $this.children('.value').val()
  };
});

或者,如果表单元素的顺序始终相同(属性,操作数,值),则可以按位置访问子项(不使用任何类或ID):

$('.item').each(function() {
  var $children= $(this).children();
  var test = {
    attribute: $children.eq(0).val(),
    operand: $children.eq(1).val(),
    value = $children.eq(2).val()
  };
});

答案 1 :(得分:2)

这应该可以解决问题,如果你已经决定改变你的标记了。查看"Attribute Starts With" Selector

的jQuery文档
$('.item').each(function() {
  var $this = $(this),
      test  = {
        attribute : $this.find('[id^="Attribute_"]').val(), 
        operand   : $this.find('[id^="Operand_"]').val(),
        value     : $this.find('[id^="Value_"]').val()
      };
});

JSFiddle

答案 2 :(得分:0)

你可以用两种方式做到这一点。

解决方案1:

test.attribute = $(this).find("input[id^='Attribute_']").val();
test.operand = $(this).find("select[id^='Operand_']").val();
test.value = $(this).find("input[id^='Value_']").val();

解决方案2 将类分配给属性,操作数和值标记以及使用下面提到的代码控制目标: -

test.attribute = $(this).find(".AttributeTag]").val();
test.operand = $(this).find(".OperandTag").val();
test.value = $(this).find(".ValueTag]").val();

希望这会有所帮助。如果您想要对此解决方案进行更多说明,请与我们联系。