为元素的每个子元素赋予不同的id

时间:2014-01-07 14:18:03

标签: javascript jquery arrays attributes children

有史以来第一个问题,编程新手。我会尽量简洁。

我想要做的是在选定的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风格),可以使用预定义的数组。

提前致谢。

1 个答案:

答案 0 :(得分: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