代码在foreach中不起作用

时间:2010-05-18 19:45:20

标签: javascript html syntax-error

这是我的代码:

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

我正在使用谷歌浏览器

5 个答案:

答案 0 :(得分:5)

javascript for...in没有达到你所期望的效果(通过数组中的eleemnts枚举。

javascript中的

for...in将枚举构成对象的键/值对(或公共变量)(这不是你想要的)。

你需要使用一个好的,老式的for循环。

答案 1 :(得分:1)

您可以将其添加到您的脚本中:

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...*/
});

答案 2 :(得分:0)

为什么不使用传统的for循环呢?你真的不是在这里使用关联数组......

答案 3 :(得分:0)

这不是迭代集合的正确方法。

您需要标准的for循环,而不是for..in循环

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

还有别的东西,然后你继续尝试迭代每个元素

for( var j in articleHTML ){
此时

articleHTML包含对单个HTML节点的引用 - 而不是任何类型的集合或数组。

答案 4 :(得分:0)

我认为你错误地将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条件

以下示例将返回提供给objectName对象文字的“book”索引的值。 objectName是我为示例对象文字所做的名称:

for ("book" in objectName) {
    if (objectName.hasProperty("book")) {