Код не работает в foreach - PullRequest
0 голосов
/ 18 мая 2010

Вот мой код:

var divarray = document.getElementById("yui-main").getElementsByTagName("div");
var articleHTML;
var absHTML;
var keyHTML;
var bodyHTML = [];
for( var i in divarray) {
    if(divarray[i].className == "articleBody"){
        articleHTML = divarray[i];
        for( var j in articleHTML ){
            bodyHTML[i] = '';
            if(articleHTML[j].className == "issueMiniFeature"){continue;}
            if(articleHTML[j].className == "abstract"){absHTML = articleHTML[i]; continue;}
            if(articleHTML[j].className == "journalKeywords"){keyHTML = articleHTML[i]; continue;}
            bodyHTML[i] = articleHTML[i];
        }
        break;
    }
    i++;
}

Я получаю ошибку:

SyntaxError: Unexpected token var

Я использую Google Chrome

Ответы [ 5 ]

5 голосов
/ 18 мая 2010

JavaScript for...in не делает то, что вы ожидаете (который перечисляется через eleemnts в массиве.

for...in в javascript будет перечислять через пары ключ / значение (или публичные переменные), которые составляют объект (что не то, что вам нужно).

Вам нужно использовать хорошую, старомодную петлю for.

1 голос
/ 28 апреля 2011

Вы можете добавить это в свой скрипт:

Array.prototype.foreach = function (callback) {
    for (var i=0; i < this.length; i++) {
        callback(this[i]);
    }
}

Тогда вы просто делаете это:

myarray.foreach(function (currentItem) {
    /*...do whatever with the currentItem...*/
});
0 голосов
/ 19 мая 2010

Я думаю, что вы ошибочно принимаете JavaScript за функциональность PHP. JavaScript не имеет циклов foreach. JavaScript имеет for in, что вы неправильно используете, и нормальные циклы for. Используйте стандартный цикл for при работе с массивами. Вам нужно будет использовать цикл for in с литералами объекта, потому что индекс не является простотой увеличивающегося положительного целого числа.

В JavaScript цикл for имеет 3 аргумента, разделенных точкой с запятой следующим образом:
* начальная позиция инкремента (необязательно, если переменная ранее определена с 0 или положительным целым числом)
* конечная позиция инкремента
* метод приращения

В следующих примерах arrayName - это значение, которое я составил для имени массива:

for (; a < arrayName.length; a += 1) {
for (a = x + 1; a < arrayName.length + 3; a += 2) {

Аргумент цикла for in состоит из двух обязательных частей и третьей части для предотвращения ошибок с использованием условия if:
* Значение индекса для поиска * Название контейнера для поиска * Третья часть - это if условие

В следующем примере будет возвращено значение, указанное в индексе «book» литерала объекта objectName. objectName - это имя, которое я сделал для литерала объекта примера:

for ("book" in objectName) {
    if (objectName.hasProperty("book")) {
0 голосов
/ 18 мая 2010

Это неправильный способ перебора коллекции.

Вы хотите стандартную for петлю, а не for..in петлю

for( var i = 0, l = divarray.length; i < l; i++ ) {

Есть что-то еще, затем вы пытаетесь перебрать каждый элемент

for( var j in articleHTML ){

articleHTML на данный момент содержит ссылку на один узел HTML - не коллекцию или массив любого рода.

0 голосов
/ 18 мая 2010

Почему бы вместо этого не использовать традиционный цикл for? Вы на самом деле не используете ассоциативный массив здесь ...

...