2014-01-07 111 views
1

有史以來的第一個問題,對編程來說是新的。我會盡可能簡潔。給元素的每個孩子分配一個不同的ID

我想要做的是在選定的div內創建一堆兒童,併爲每個兒童分配特定的html內容(來自預定義數組)和不同的id。

我建立這個循環的效應:

Game.showOptions = function() { 
    var i = 0; 
    Game.choiceElement.html(""); 
    for (i=0; i<Game.event[Game.state].options.length; i++) { 
     Game.choiceElement.append(Game.event[Game.state].options[i].response); 
     Game.choiceElement.children()[i].attr("id","choice1");  
    } 
}; 

使用陣列的預定義的值:

Game.event[0] = { text: "Hello, welcome.", 
         options: [{response: "<a><p>1. Um, hello...</p></a>"}, 
           {response: "<a><p>2. How are you?</p></a>"}] 
       }; 

此方法似乎並不奏效,因爲該循環停止後,才運行一次迭代。我真誠地不知道爲什麼。如果有一種完全不同的方式來獲得我需要的東西,我就會全神貫注。

如果我定義數組內的每個單獨的p的id屬性,它的工作原理,但我想避免這一點。

這個想法是創建一個全功能的對話選擇算法(基於文本的RPG風格),將與預定義的數組一起工作。

在此先感謝。

+4

你會分配相同的ID給你添加的每個孩子。也許''選擇「+我'會更有意義? –

+0

如果您已經使用jQuery,是否有一個原因,您不想通過CSS3子選擇器選擇不同的子div? – Abernasty

+0

Marc B - 你是對的,現在我只想讓循環工作,但謝謝指出! Abernasty - 我appologize,但我不知道如何回答這個問題!恐怕我必須學得更多。 – Tiago

回答

0

你的循環的問題,因爲我看到它可能會在幾個不同的地方。這裏有三件事你應該檢查,而且我假設你有,但只是沒有告訴我們...

Game定義爲一個對象?

var Game = {}; 

event定義爲數組嗎?

Game.event = new Array(); 

Game.state返回一個數字,並在那個適當的數字?我想這會更有活力,然後我寫在這裏,但希望你會明白。

Game.state = 0; 

現在假設所有上述工作正常...

使用eq(i)而不是[i]

for (var i = 0; i<Game.event[Game.state].options.length; i++) { 
    Game.choiceElement.append(Game.event[Game.state].options[i].response); 
    Game.choiceElement.children().eq(i).attr("id","choice" + (i + 1)); 
} 

這裏是JSFiddle

+0

謝謝您的回覆!是的,所有的變量都像你剛纔提到的那樣被嚴格地聲明。這個小小的eq()調整確實可以解決問題! 循環現在運行正常。 – Tiago

相關問題