我想用新值替换name属性的一部分。该值取决于原始值。 name属性的值为:timeslots [timeslot_1] [start]
如何将'timeslot_1'值增加到'timeslot_2'并用此值替换原始值?
cloneElm包含两种类型的元素(输入和选择) - 我希望能够捕获循环中的两个元素。
到目前为止我的代码:
$(cloneElm).children('span').children('input').each(function(id) {
var newName = $(this).attr('name').replace('timeslot_1', 'timeslot_2');
$(this).attr('name', newName);
});
由于
答案 0 :(得分:2)
其实我不确定自己是否走在正确的轨道上,因为我对你的问题感到有些困惑,但这是对它的抨击。
$(cloneElm).children('span').children('input').each(function(id) {
var mynumber = parseInt((($(this).attr('name')).split("_"))[1]);
var newName = $(this).attr('name').replace('timeslot_' + mynumber, 'timeslot_' + (mynumber + 1));
$(this).attr('name', newName);
});
阅读其他一些帖子后,可以像这样清理
$(cloneElm).find(':input').attr('name', function(i, name) {
var mynumber = parseInt(name.split("_")[1]);
return name.replace('timeslot_' + mynumber, 'timeslot_' + (mynumber + 1));
});
答案 1 :(得分:2)
我认为使用.attr()
这种更通用的方法就是你所追求的:
$(cloneElm).find(':input').attr('name', function(i, name) {
return name.replace('timeslot_1', 'timeslot_2');
});
答案 2 :(得分:0)
以下是结合上述内容的示例:
$(cloneElm).children('span').children('input, select').attr("name", function () {
return this.name.replace(/timeslot_(\d+)/, function ($0, $1) {
return "timeslot_" + (+$1 + 1);
});
});
答案 3 :(得分:0)
为了更通用,这只会增加所有选择和输入字段名称属性的数字。
$(cloneElm).children('span').children('input, select').attr('name', function(i, name) {
if ((var result = name.match(/\d+$/)) && result)
return name.replace(/\d+$/,parseInt(result)+1));
});
答案 4 :(得分:0)
可以(正如许多人所指出的那样)使用字符串拆分和正则表达式来执行此操作,但在我看来,这有点混乱,可以说是不必要的。
如果您使用的是jQuery 1.4.3或更高版本,则可以使用HTML5 data
属性将数据存储在HTML元素中以供日后使用[1]。
我会让你决定如何最好地选择你需要的元素,但是这样的东西应该提供你需要的功能:
<script type="text/javascript">
function inc_timeslot(elem) {
// calculate our next timeslot however we need to
var timeslot = $(elem).data("timeslot");
timeslot += 1;
// set the attribute
$(elem).attr("name", "timeslot_" + timeslot);
// and update the data attribute for next time
$(elem).data("timeslot", timeslot);
}
</script>
<!-- ... -->
<input name="timeslot_1" data-timeslot="1">
data
函数来设置数据,但这意味着您可能需要使用内联script
标记。