我正在尝试替换表单元素的索引。我有以下
var test = "<input name='[1].Id' value='598' type='hidden' /><input name='[1].OrderItemId' value='867' type='hidden' />";
alert(test.replace('[1]', '[2]'));
我得到了好奇的结果。第一个隐藏字段被第二个被忽略的
替换即我的回答是这样的:
"<input name='[1].Id' value='598' type='hidden' /><input name='[2].OrderItemId' value='867' type='hidden' />"
编辑:
好的,谢谢这些方法适用于我的简单示例。但实际上我的字符串有点复杂。这是“var lastRow”
的内容<td>
<a class="deleteAddress" href="#">
<img alt="remove" src="/images/icons/delete_button.gif">
</a></td>
<td class="p-5" width="100">
<input name="[1].Id" value="612" type="hidden">
<input name="[1].OrderItemId" value="868" type="hidden">
<input class="itemAddressQuantity" name="[1].Quantity" value="" type="text">
</td>
<td class="p-5" width="100">
<select name="[1].AddressId"><option value="2">address1</option></select>
</td>
这里是js函数
$('#addNewAddress').click(function (event) {
event.preventDefault();
var length = $('.table-item-address tbody').find('tr').length;
var previousLength = length - 1;
var previousIndex = "/\[" + previousLength + "\]/g";
var currentIndex = "[" + length + "]";
var lastRow = $('.table-item-address tbody tr').last();
alert(lastRow.html()); // html is shown above
var newRow = lastRow.html().replace(previousIndex, currentIndex);
$('.table-item-address tr').last().after('<tr>' + newRow + '</tr>');
AdjustValues();
});
答案 0 :(得分:5)
在JavaScript中,将字符串作为第一个参数传递给replace()
只会替换第一个匹配项。你需要使用带有全局标志的正则表达式:
test.replace(/\[1\]/g, '[2]');
额外的反斜杠(\
)会转义括号([
和]
)。
编辑:响应OP的编辑,如果要动态构建正则表达式,则不能使用正则表达式文字 - 这是由正斜杠(/
)分隔的内容,不引用("
),就像在编辑中一样。你将一个字符串传递给replace()
,我正在传递一个正则表达式字面值。使用JavaScript RegExp()
constructor修复您的问题:
// The first argument is the regex, the second is a string of flags.
var previousIndex = new RegExp("\\[" + previousLength + "\\]", "g");
// Then, it's exactly the same as before.
// The second argument to replace is still a string.
var newRow = lastRow.html().replace(previousIndex, currentIndex);
请注意字符转义的差异。
答案 1 :(得分:1)
见这里:http://www.w3schools.com/jsref/jsref_replace.asp
检查他们谈论全局替换的第3个样本
答案 2 :(得分:0)
将替换更改为此replace(/[1]/g, '[2]');
这是全球取代。但是我不确定[]和。是ids / names的合法字符。