J'essaie de remplacer l'id d'un élément jQuery pour le suivant comme suit: 'foo-1' -> 'foo-2'

Et j'ai finalement terminé avec ceci:

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

Laid, non? Des idées sur la façon dont j'améliorerais cela .....?

0
David Santamaria 18 nov. 2011 à 12:40

5 réponses

Meilleure réponse

Utilisez la fonction de rappel de remplacement pour simplifier votre code:

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

$2 correspond aux premières parenthèses (qui est '-' dans votre cas), $3 correspond aux chiffres. Vous pouvez ensuite tailler le numérique avec parseInt() et l'incrémenter d'une unité. Enfin, vous assemblez la chaîne remplacée avec l'opérateur de chaîne +.

4
steveyang 18 nov. 2011 à 09:46

Vous pouvez le faire comme ça:

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

Cela présente de multiples avantages par rapport à votre code:

  • il met en cache l'élément que vous traitez (comme el),
  • il met en cache l'ID traité de l'élément (comme old_id),
  • c'est très propre et lisible,
  • il utilise même moins de lettres que votre code,

Voir ce jsfiddle pour une preuve de la modification des identifiants en identifiants plus élevés.

1
Tadeck 18 nov. 2011 à 08:51
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
Adam Merrifield 18 nov. 2011 à 08:47

Peut-être quelque chose comme ça

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

Démo en direct: http://jsfiddle.net/xH7Rf/

1
Niels 18 nov. 2011 à 08:47
$(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));
});
1
thecodeparadox 18 nov. 2011 à 09:14