替换jQuery ID

时间:2011-11-18 08:40:41

标签: javascript jquery string

我正在尝试替换下一个jQuery元素的id,如下所示: 'foo-1' - > '富-2'

我终于以此结束了:

$(this).attr('id',$(this).attr('id').replace(/-[0-9]*/,'-'+(parseInt($(this).attr('id').substring($(this).attr('id').indexOf('-')+1,$(this).attr('id').length))+1)));

丑陋,对吗? 关于如何改进这个的任何想法.....?

5 个答案:

答案 0 :(得分:4)

使用替换回调函数来简化代码:

this.id = this.id.replace(/(-)(\d)*/, function ($1,$2,$3,$4) {
  console.log(arguments);
  var index = parseInt($3,10);
  return $2 + ++index + "";
});

$2匹配第一个括号(在您的情况下为' - '),$3匹配数字。然后使用parseInt()将数字增加并将其递增1。最后,将替换后的字符串与+字符串运算符放在一起。

答案 1 :(得分:2)

var id = $(this).attr('id'),
    num = parseInt(id, 10),
    next = num + 1,
    string = id.substring(0, id.length - num.length) + next;


$(this).attr('id', string);

答案 2 :(得分:1)

也许是这样的

var num = parseInt( $(this).attr("id").replace(/[^0-9]+/g, ''));
var newid = id.replace(num, '') + (num + 1);

现场演示:http://jsfiddle.net/xH7Rf/

答案 3 :(得分:1)

你可以这样做:

var el = jQuery(this);
var old_id = el.attr('id');
var id_number = parseInt(old_id.match(/\d/), 10);
el.attr('id', old_id.replace(id_number, id_number+1));

这比您的代码有许多优点:

  • 它缓存您正在处理的元素(如el),
  • 它缓存元素的已处理ID(如old_id),
  • 它非常干净和可读,
  • 它甚至比你的代码使用更少的字母,

有关将ID更改为具有更高整数的ID的证明,请参阅this jsfiddle

答案 4 :(得分:1)

$(this).attr('id',
function() {
    var me = this;
    return $(me).attr('id').replace(/[0-9]/g, '') + (parseInt($(me).index() + 1));
});

// this code snippet will assign id to element if it possess any id (like: foo-1/foo-2) or not

$(this).attr('id',
function() {
    var me = this;
    return ($(me).attr('id') ? $(me).attr('id').replace(/[0-9]/g, '') : 'foo-') + (parseInt($(me).index() + 1));
});