我有以下输入:
<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]的最简单有效的方法是什么?输入名称中的其他字符串必须完整。
答案 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]