尝试使用以下代码
在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>
我正在努力
可能有很多其他方法来获取值,但目前我实现了这一点,并希望通过一些修改坚持使用相同的代码。
我该如何处理?
由于
答案 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()
};
});
答案 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();
希望这会有所帮助。如果您想要对此解决方案进行更多说明,请与我们联系。