Замена идентификатора jQuery - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь заменить идентификатор элемента jQuery следующим: 'foo-1' -> 'foo-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 ]

4 голосов
/ 18 ноября 2011

Используйте функцию обратного вызова для замены, чтобы упростить ваш код:

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() и увеличиваете ее на единицу. Наконец, вы соединяете замененную строку с помощью + строкового оператора.

2 голосов
/ 18 ноября 2011
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);
1 голос
/ 18 ноября 2011
$(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 голос
/ 18 ноября 2011

Вы можете сделать это так:

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),
  • кэширует обработанный идентификатор элемента (как old_id),
  • он очень чистый и читаемый,
  • он даже использует меньше букв, чем ваш код,

См. этот jsfiddle для доказательства изменения идентификаторов на идентификаторы с более высоким целым числом в них.

1 голос
/ 18 ноября 2011

Может быть, что-то вроде этого

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

Демонстрация в реальном времени: http://jsfiddle.net/xH7Rf/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...