在jQuery中替换部分表单元素属性

时间:2010-11-02 13:48:33

标签: jquery

我想用新值替换name属性的一部分。该值取决于原始值。 name属性的值为:timeslots [timeslot_1] [start]

  1. 如何将'timeslot_1'值增加到'timeslot_2'并用此值替换原始值?

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

  3. 到目前为止我的代码:

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

    由于

5 个答案:

答案 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)

  • 您可以将函数作为第二个参数传递给 attr(),从而无需 each()
  • 要同时选择输入选择元素,您需要相应地调整选择器。
  • 最后,您还可以为 replace()方法提供正则表达式和函数。

以下是结合上述内容的示例:

$(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">
  1. 在早期版本的jQuery中,您可以使用jQuery data函数来设置数据,但这意味着您可能需要使用内联script标记。