Как найти отделение с частью имени класса и получить остающуюся часть того имени класса?

Существует несколько отделений на моей странице с классами my_widget-2, my_widget-8, и т.д., Что JavaScript или код jQuery я могу использовать для получения номера "2" (т.е. число, которое добавляет первый виджет соответствия)?

Примечание: Если бы я должен был записать этот вопрос снова, то я изменил бы порядок этих имен классов и попросил бы способ добраться "8", чтобы не производить впечатление, что я хочу меньшее число.

5
задан TylerH 16 May 2016 в 13:31
поделиться

4 ответа

$( "[class*='my_widget']" ).each ( function () {
    var elClasses = $( this ).attr ( 'class' ).split ( ' ' );

    for ( var index in elClasses ) {
        if ( elClasses[index].match ( /^my_widget-\d+$/ ) ) {
            var classNum = elClasses[index].split ( '-' )[1];
            alert ( classNum );
            break;
        }
    }
} );

Используйте селектор " атрибутContains", чтобы получить все элементы, которые имеют класс my_widget-*, а затем пройдите по всем классам, которые имеет элемент, ищущий вас в классе. Как только вы его найдете, извлеките числовую часть.

8
ответ дан 13 December 2019 в 22:09
поделиться

Это должно сработать:

$("[class^='my_widget']").each(function() {
    var classParts = $(this).attr('class').split('-');
    var number = classParts.pop();
});

Пожалуйста, обратите внимание, что это сработает только если есть единственный класс, в противном случае вы получите что-то вроде 8 другого класса .

1
ответ дан 13 December 2019 в 22:09
поделиться

Основной JS подход:

<div id="x" class="widget-2 lang-日本語">foo</div>

function Element_getClassArgument(el, name) {
    var classes= el.className.split(' ');
    var prefix= name+'-';
    for (var i= classes.length; i-->0;)
        if (classes[i].substring(0, prefix.length)==prefix)
            return classes[i].substring(prefix.length);
    return null;
}

Element_getClassArgument(document.getElementById('x'), 'widget'); // 2

Если вы хотите включить пробельные символы или дефис в имени, вы должны ввести схему кодирования, например, компонент кодирования. Но часто вы можете уйти без этого.

Упаковка в что-то с $ в названии оставили как упражнение для читателя. :-)

.
1
ответ дан 13 December 2019 в 22:09
поделиться

Если Вы хотите получить элементы DIV с классом my_widget-2, используйте этот селектор:

$("div.my_widget-2")

Но если Вы хотите получить все элементы DIV с классом вида my_widget-N, где N - произвольное число, попробуйте следующее:

$("div[class]").each(function() {
    var matches = this.className.match(/(?:^|\s+)my_widget-(\d+)(?:\s+|$)/g);
    if (matches !== null) {
        alert(matches);
    }
})
0
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: