如何使用Jquery替换复杂输入名称中的某些字符串

时间:2015-10-22 04:49:02

标签: jquery input

我有以下输入:

<input type="text" class="w50" name="field_id_9[rows][row_id_1][col_id_3]" value="">
<select name="field_id_11[rows][row_id_3][col_id_15]">...</select>

使用jquery用[new_row_x + 1]替换字符串[row_id_x]的最简单有效的方法是什么?输入名称中的其他字符串必须完整。

2 个答案:

答案 0 :(得分:0)

尝试使用.attr()Number().match().replace()

$("input").attr("name", function(_,attr) {
  var re = /row_id_\d+/;
  var n = Number(attr.match(re)[0].split(/[^\d+]/).pop()) + 1;
  return attr.replace(re, "new_row_" + n)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" class="w50" name="field_id_9[rows][row_id_1][col_id_3]" value="">

答案 1 :(得分:0)

选中此fiddle

<强>功能

function getNewName(name){
    //match [row_id_x]
    var rowIdExpression = new RegExp('\\[row_id_\\d\\]');
    var rowId = name.match(rowIdExpression).toString();
    //match number
    var numberExpression = new RegExp('\\d');
    var number = rowId.match(numberExpression);
    //increment & replace number to create new rowId
    var newrowId = rowId.replace(number, parseInt(number)+1);
    //match [row_id_x] in original name and replace with newName
    var newName = name.replace(rowIdExpression, newrowId);
    return newName;
}

遍历子项并应用函数(假设:基于提供的标记;标记包含在div中。根据您的需要进行更改)

$('div').children().each(function(){
    $(this).attr('name', function(){
        return getNewName($(this).attr('name'))
    });
});

input元素的新名称为field_id_9[rows][row_id_2][col_id_3]select元素的新名称为field_id_11[rows][row_id_4][col_id_15]