Существует несколько отделений на моей странице с классами my_widget-2
, my_widget-8
, и т.д., Что JavaScript или код jQuery я могу использовать для получения номера "2" (т.е. число, которое добавляет первый виджет соответствия)?
Примечание: Если бы я должен был записать этот вопрос снова, то я изменил бы порядок этих имен классов и попросил бы способ добраться "8", чтобы не производить впечатление, что я хочу меньшее число.
$( "[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-*
, а затем пройдите по всем классам, которые имеет элемент, ищущий вас в классе. Как только вы его найдете, извлеките числовую часть.
Это должно сработать:
$("[class^='my_widget']").each(function() {
var classParts = $(this).attr('class').split('-');
var number = classParts.pop();
});
Пожалуйста, обратите внимание, что это сработает только если есть единственный класс, в противном случае вы получите что-то вроде 8 другого класса
.
Основной 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
Если вы хотите включить пробельные символы или дефис в имени, вы должны ввести схему кодирования, например, компонент кодирования
. Но часто вы можете уйти без этого.
Упаковка в что-то с $
в названии оставили как упражнение для читателя. :-)
Если Вы хотите получить элементы 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);
}
})