2010-11-02 47 views
4

我想用新值替换名称属性的一部分。该值取决于原始值。 name属性的数值为:时隙[timeslot_1] [开始]替换jQuery中表单元素属性的一部分

  1. 如何增加价值“timeslot_1”到“timeslot_2”,并与这一个替换原来的价值?

  2. cloneElm由两种类型的元素(输入和选择)组成 - 我希望能够捕获我的循环中的两个元素。

的代码,我到目前为止有:

$(cloneElm).children('span').children('input').each(function(id) { 
     var newName = $(this).attr('name').replace('timeslot_1', 'timeslot_2'); 
     $(this).attr('name', newName); 
    }); 

感谢

回答

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

后,我想这与.attr()更通用的方法是你追求的:

$(cloneElm).find(':input').attr('name', function(i, name) { 
    return name.replace('timeslot_1', 'timeslot_2'); 
}); 
0
  • 您可以将函数作为第二个参数传递给attr(),从而消除每个需要()
  • 为了同时选择输入选择元素,您需要相应地调整选择器。
  • 最后,您也可以为replace()方法提供正则表达式和函数。

这里是结合上述的例子:

$(cloneElm).children('span').children('input, select').attr("name", function() { 
    return this.name.replace(/timeslot_(\d+)/, function ($0, $1) { 
     return "timeslot_" + (+$1 + 1); 
    }); 
}); 
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)); 
}); 
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"> 
  1. 在早期版本的jQuery,你可以使用jQuery的data函数来设置数据,但这意味着您可能需要使用内嵌script标记。