JavaScript不替换所有元素

时间:2010-08-09 18:35:41

标签: javascript jquery

我正在尝试替换表单元素的索引。我有以下

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

3 个答案:

答案 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的合法字符。