2014-01-07 73 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

相关问题