JavaScript / jQuery - получение целого числа из идентификатора элемента - PullRequest
5 голосов
/ 08 января 2010

Из следующей разметки.

<div id="my-div">
    <a href="#" id="link-1">Somewhere</a>
    <a href="#" id="link-2">Somewhere else</a>
</div>

Какие есть варианты использования селекторов jQuery и JavaScript для получения целого числа в идентификаторах?

Например.

$("#my-div a").click(function(){
    $(this).id // ... somehow grab n from "link-n"        
    alert(n);
});

Ответы [ 10 ]

4 голосов
/ 08 января 2010

Вы можете попробовать:

var n = $(this).attr('id').match(/link-(\d+)/)[1];

Извлекает атрибут id, сопоставляется с шаблоном link-(\d+) (что означает link-, за которым следует одна или несколько цифр), а затем извлекает первое совпадение подвыражения (часть в скобках \d+) это должен быть номер, который вы ищете.

Если вам нужно работать с n как целое число вместо строки, вам следует использовать parseInt, указав основание 10:

var n = parseInt($(this).attr('id').match(/link-(\d+)/)[1], 10);

Если ваши атрибуты id не обязательно начинаются с link-, за которым следуют одна или несколько цифр, и вы хотите перехватить этот случай, а не выдавать ошибку, вы должны проверить возвращаемое значение match:

var match = $(this).attr('id').match(/link-(\d+)/);
if (match) {
    var n = parseInt(match[1], 10);
    alert(n);
} else {
    // do something else if they don't match
}
2 голосов
/ 08 января 2010

Поскольку предыдущий текст всегда остается неизменным, вы можете просто использовать метод substring , чтобы получить число.

$(this).attr('id').substring(5)
2 голосов
/ 08 января 2010

$(this).attr('id').replace('link-','')

1 голос
/ 08 января 2010
$(this).attr('id').split('-')[1];
1 голос
/ 08 января 2010
var id = $(this).attr('id'),
    regex = /(\d+)/,
    matched = id.match( regex );

if ( matched ) {
    alert( matched[1] )
}
1 голос
/ 08 января 2010

Я обычно делаю что-то вроде этого:

$("#my-div a").click(function(){
    var match;
    if (match = $(this).attr('id').match(/link-(\d+)/)) {
      var number = parseInt(match[1],10);
      alert(number);
    }
});
1 голос
/ 08 января 2010

Лучшим вариантом будет использование регулярного выражения, например:

// id contains '1' for id="link-1"
var id = parseInt(this.id.replace(/[^\d]/g, ''), 10);
0 голосов
/ 09 января 2010

Это должен быть самый простой способ:

var id = this.id.replace(/[^\d]/g,'')*1;

Возвращает любые цифры из атрибута ID как number (*1 выполняет преобразование, аналогично parseInt). В вашем примере:

$("#my-div a").click(function(){
    var n = this.id.replace(/[^\d]/g,'')*1;
    alert(n);  // alerts any number in the ID attribute
    alert(typeof n) // alerts 'number' (not 'string')
});
0 голосов
/ 08 января 2010

Вы можете использовать регулярное выражение для разбора числа:

var match = /link-(\d+)/.exec($(this).attr('id'));
var num = match[1];
0 голосов
/ 08 января 2010

Если вы знаете, что все ваши идентификаторы имеют префикс «link-», вы можете просто получить подстроку идентификатора:

$("#my-div a").click(function(){
   alert(this.id.substr(5));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...