У меня есть страница, где я пытаюсь выбрать массивы классов для большого количества отделений, которые совместно используют общий класс. Например:
<div class="common lorem ipsum"></div>
<div class="common dolor sit"></div>
<div class="common hello world"></div>
Я хочу выбрать каждого common
отделение класса и получает Массив, он - классы. В данный момент я делаю его при помощи этого бита jQuery:
$('.common').each(function(index) {
var classes = $(this).attr('class').split(" ");
for(var i in classes) {
alert(classes[i]);
}
});
Рассмотрение первого получающегося classes
переменная дает это:
classes: Array (3)
0: "common"
1: "lorem"
2: "ipsum"
length: 3
__proto__: Array
Проблема состоит в том что for(var i in classes)
кажется, выполняет итерации по __proto__
Массив и копающийся вниз в том также - кто-либо когда-либо сталкивался с этим прежде? Я использую последнюю версию Chrome (6.0.453.1).
for ( var i = 0, l = classes.length; i<l; ++i ) {
alert( classes[i] );
}
Перебирать массив с помощью обычного цикла for, а не for ... в
, в противном случае он перечисляет свойства массива (поскольку он все еще является объектом и имеет другие свойства в дополнение к элементам внутри).
@meder правильно ответил на ваш вопрос, я просто хотел добавить, что если порядок перечисления не важно, вы всегда можете использовать эту упрощенную форму:
for ( var i = classes.length; i--; ) {
alert( classes[i] );
}
Она короче и быстрее.
Чтобы добавить к другим действительным ответам, поскольку вы уже используете jQuery, вы можете воспользоваться jQuery.each
:
$.each(classes, function (i, cls) {
alert(cls);
});