При итерации по $ jQuery (этот) .attr ('класс') .split (“”) дает нечетные результаты

У меня есть страница, где я пытаюсь выбрать массивы классов для большого количества отделений, которые совместно используют общий класс. Например:

<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).

10
задан Sam Starling 5 July 2010 в 17:21
поделиться

3 ответа

for ( var i = 0, l = classes.length; i<l; ++i ) {
 alert( classes[i] );
}

Перебирать массив с помощью обычного цикла for, а не for ... в , в противном случае он перечисляет свойства массива (поскольку он все еще является объектом и имеет другие свойства в дополнение к элементам внутри).

17
ответ дан 3 December 2019 в 16:51
поделиться

@meder правильно ответил на ваш вопрос, я просто хотел добавить, что если порядок перечисления не важно, вы всегда можете использовать эту упрощенную форму:

for ( var i = classes.length; i--; ) {
  alert( classes[i] );
}

Она короче и быстрее.

2
ответ дан 3 December 2019 в 16:51
поделиться

Чтобы добавить к другим действительным ответам, поскольку вы уже используете jQuery, вы можете воспользоваться jQuery.each :

$.each(classes, function (i, cls) {
    alert(cls);
});
4
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

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