Найти динамическое имя класса элемента с помощью jQuery

У меня есть неизвестное количество таких элементов:

<div class="item item-1"></div>
<div class="item item-2"></div>
<div class="item item-3"></div>

Что я хочу сделать, так это проверить, имеет ли каждый элемент имя класса, начинающееся с «item-». Если это правда, извлеките идентификатор. Что-то вроде этого:

$("container").each(function
    if ($(this).hasClassNameStartingWith("item-"))
        console.debug(theId);
);

Как это возможно?

Заранее спасибо!


person Kordonme    schedule 03.11.2009    source источник


Ответы (2)


Используйте селектор contains в атрибуте класса:

$('container[class*=" item-"]').each( function() {
    var classID = null;
    var classes = $(this).attr('class').split( ' ' );
    for (var i = 0, len < classes.length; i < len; ++i) {
        var class = classes[i];
        if (class.match( /^item-/ )) {
            classID = class.replace("item-",'');
            break;
        }
    }
    if (classID) {
        ... do something ...
    }
});

Обратите внимание на использование кавычек для включения пробела, учитывая разметку вашего образца. Вы также можете опустить пробел, если класс «item-N» может появиться в начале списка, и вы уверены, что нет классов, которые случайно совпадут с этой строкой.

Обновлен пример, чтобы показать, как извлечь часть идентификатора из имени класса.

person tvanfosson    schedule 03.11.2009
comment
Да! Почему я не подумал об этом. Но как мне получить удостоверение личности? - person Kordonme; 03.11.2009
comment
Дэвид: Идентификатор в классе item-N. - person Kordonme; 03.11.2009
comment
Пройдите классы и найдите тот, который соответствует образцу. Извлеките число, удалив начальный элемент-. Я обновлю. - person tvanfosson; 03.11.2009

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

var itemIDRe = /(?:^|[ \t\n\r\f\u200b]+)item-([^ \t\n\r\f\u200b]+)/;

$('#container').children().each(function() {
  var match = itemIDRe.exec($(this).attr('class'));
  var itemID = match ? match[1] : null;

  // Do something with itemID.
});

Регулярное выражение основано на определении HTML 4 для class атрибут и пробел.

person Annabelle    schedule 03.11.2009