2013-01-06 28 views
1
var Animals = { 
    "Europe": { "weasel.jpg": "squeak", "cow.jpg": "moo"}, 
    "Africa": { "lion.jpg": "roar", "gazelle.jpg": "bark"},   
}; 

function region(a){ 
    var b = "Animals."+a; 
    for(var index in b) { 
     var target = document.getElementById('div1'); 
     var newnode = document.createElement('img'); 
     newnode.src = index; 
     target.appendChild(newnode) 
    } 
} 

RELEVANT HTML傳遞的參數循環使用串聯,並通過陣列

<li onclick="europe('Europe')">Europe</li> 

目標:在歐洲<li>的點擊,字通歐洲進入我區的功能,然後在此連接起來以產生Animals.Europe

這是爲了使用for(var index in Animals.Europe)循環來標識頂部對象結構中的數組。爲什麼產生Animals.Europe的連接不像我輸入的那樣處理?

此外,你可以看到我已經使用數組來存儲不同動物的圖像源和描述。使用我有限的編碼知識,這是我所能想到的。是否有更簡單的方式來存儲圖像/描述數據以便在HTML中生成?

+0

你是不是指'onclick ='region('Europe')「'? – elclanrs

回答

0

您可以通過訪問歐洲物業工作對象以下

Animals[a] 

另外你要調用一個「歐洲」功能時,你應該叫「區域」

您不是將動物存儲在數組中,而是將其中的圖像名稱作爲鍵的對象存儲。通常你會想使用相關的名字作爲鍵。例如,如果你想要動物的陣列,每個大洲

var Animals = { 
    "Europe": [{ 
     imageSrc: "weasel.jpg", 
     cry: "squeak" 
    },{ 
     imageSrc: "cow.jpg", 
     cry: "moo" 
    }], 
    "Africa": [{ 
     imageSrc: "lion.jpg", 
     cry: "roar" 
    },{ 
     imageSrc: "gazelle.jpg", 
     cry: "bark" 
    }]   
}; 

現在的動物[「歐洲」]給出的對象,在那裏你可以最終存儲其他屬性的數組。所以如果b是一個數組,你的循環現在看起來像:

var b = Animals['Europe']; 

for(var i=0; i < b.length; i++) { 
    var target = document.getElementById('div1'); 
    var newnode = document.createElement('img'); 
    var animalData = b[i]; // The array item is now an object 
    newnode.src = animalData.imageSrc; 
    target.appendChild(newnode) 
} 
+0

感謝您的回覆,非常感謝。我沒有太多的數組/對象的實驗..我把鍵設置爲圖像名稱的原因是我可以從每個大陸生成圖像,所以我可以循環使用*** for(var Index in Animals.Europe ){***然後使用通過循環的每次運行的索引變量來使用*** var newnode = document創建一個img元素。的createElement( 'IMG'); newnode.src = index; ***如果我使用上面的例子,我將如何遍歷imageSrc屬性來提取.jpg數據? – DVCITIS

+0

你會得到它的竅門:)我用一個循環的例子編輯我的回覆。這真的取決於你是否要使用動物的哭泣,或者添加更多關於每隻動物的細節。如果你所有存儲的都是圖像名稱,那麼每個大陸都會給出一組圖像名稱。 – Jad

+0

完美!再次感謝。 – DVCITIS

1

「動物」。 + a只是一個字符串值,例如「動物。歐洲」,這與Animals.Europe不同。如果將第一行更改爲var b = Animals[a];,則應該全部設置。

編輯:和elclanrs指出,它應該是region('Europe'),而不是europe('Europe')

1

爲什麼產生Animals.Europe的連接不像對待我輸入的一樣?

在這種情況下可變b僅僅是一個字符串(「Animals.Europe」),其被像任何其他的字符串(即,一個字符的列表)處理。這意味着,當您試圖循環播放它時(for(index in b)),您將循環播放一個簡單的字符列表。

您可以改爲使用訪問對象屬性的方括號表示法。這意味着您可以改爲編寫var b = Animals[a],從Animals中檢索屬性a。你可以閱讀更多有關在這過程on this MDN page

+0

太棒了,謝謝!問題解決了。 – DVCITIS