2010-05-18 88 views
0

這裏是我的代碼:代碼不工作的foreach

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 

我使用谷歌瀏覽器

回答

0

我認爲你錯誤的PHP功能的JavaScript。 JavaScript沒有foreach循環。 JavaScript有for in,這是你不正確使用和正常for循環。處理數組時使用標準的for循環。您將需要使用帶有對象文字的for in循環,因爲索引不是遞增正整數的簡單性。

在JavaScript一個for環具有3份在其參數由分號分隔如下:
*啓動
*的端部位置(如果所述變量與0或正整數先前定義的任選的)增量器的位置增量器
*增量

在以下實施例arrayName的方法是值I由用於陣列的名稱:

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")) { 
5

的JavaScript for...in沒有按」 t做你期望的事情(這是通過列陣中的元素列舉的)

javascript中的將通過構成對象的鍵/值對(或公共變量)進行枚舉(這不是您想要的)。

您需要使用良好的老式for循環。

+0

同上什麼@justin說,這裏http://www.w3schools.com/js/js_loop_for_in.asp – dscher 2010-05-18 19:49:44

+0

+1:我遇到了這個確切的問題。不過,我選擇使用jQuery的.each循環,因爲它在我的僱主使用的(自定義)jQuery插件中。 – Powerlord 2010-05-18 19:51:28

+0

嘿,我先說了...... :) – Robusto 2010-05-18 19:56:01

0

爲什麼不使用傳統的for循環代替?您在這裏沒有真正使用關聯數組...

0

這不是迭代集合的正確方法。

你想要一個標準for循環,而不是一個for..in循環

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

還有別的東西,那麼你就繼續嘗試遍歷每個元素

for(var j in articleHTML){ 

articleHTML在這一點上持有參考到一個HTML節點 - 不是任何類型的集合或數組。

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

函數往往被稱爲'each'或'map'。好主意,但。 – cHao 2011-04-28 19:37:10