首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript动态添加HTML

Javascript动态添加HTML
EN

Stack Overflow用户
提问于 2014-01-28 12:16:36
回答 3查看 123关注 0票数 3

请看下面的代码http://jsfiddle.net/u8Bg3/

但是第二个工作是http://jsfiddle.net/u8Bg3/1/

正如Er144所指出的,即使这样也适用于jquery http://jsfiddle.net/u8Bg3/14/

我还发现了附录儿童的作品,但没有innerhtml。

两者的区别在于,在前一个html中,在第二个html中,它是动态创建的

代码语言:javascript
复制
<body>
    <div class="racetrack" id="racetrack"></div>
    <div id="track-tmpl" class="hide">
        <div class="track"><div id="player{{ x }}" class="runner"></div></div>
    </div>
</body>

JS

代码语言:javascript
复制
var position = [0,40,80,120,80],
    racetrack = document.getElementById('racetrack');
    track_tmpl = document.getElementById('track-tmpl').innerHTML;


function Players(ele, ptimeout)
{
    this.el = ele;
    this.i = 0;
    this.iterations = 0;
    this.stop = 0;
    this.timeout = ptimeout;
    this.position = 0;

    this.animate = function(){
        if(this.i !== 0){
            this.move((this.position + 5), this.i);
        }
        if(!this.stop){
            if(this.i < 5){
                setTimeout(function(_this){             
                    _this.i++;
                    _this.animate();
                },this.timeout,this);
            }
            if(this.i==5){
                this.iterations ++;
                if(this.iterations < 50){
                    this.i = 0;
                    this.animate();
                }
                else{
                    this.el.style.backgroundPosition = '120px 0px';
                }
            }
        }
    };


    this.start = function(){
        this.stop = 0;
        this.animate();
    };

    this.move = function(to,positionIndex){
        this.position = to;
        this.el.style.backgroundPosition = '-'+position[positionIndex]+'px 0px';
        this.el.style.webkitTransform = 'translate('+to+'px)';
        this.el.style.mozTransform = 'translate('+to+'px)';
    }
}

function Game(noOfPlayers){

    this.noOfPlayers = noOfPlayers;

    this.players = new Array();

    for (var i = 0; i < this.noOfPlayers ; i++){
        racetrack.innerHTML = racetrack.innerHTML + track_tmpl.replace('{{ x }}', i);
        this.players.push(new Players(document.getElementById('player' + i), (120 + i)));
        /* issue here with dynamic added content*/
    }


    this.start = function(){
        for (var i = 0; i < this.noOfPlayers; i++){
            this.players[i].start();
        }
    };
}

var game = new Game(3);
game.start();

为什么在动态添加的html中只有最后一个移动

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-28 13:26:15

问题是在for循环中创建player(n)对象以及使用‘+=’分配给innerHTML的分配。修改后的小提琴:http://jsfiddle.net/u8Bg3/15/工作很好。为一个好问题干杯!

代码语言:javascript
复制
  var finalized_tracks= "" ;
    for (var i = 0; i < this.noOfPlayers ; i++){
    finalized_tracks +=  track_tmpl.replace('{{ x }}', i);
    }
  racetrack.innerHTML = racetrack.innerHTML + finalized_tracks;

    for (var i = 0; i < this.noOfPlayers ; i++){
  this.players.push(new Players(document.getElementById('player'+ i),(120+i)));
    }
票数 0
EN

Stack Overflow用户

发布于 2014-01-28 12:59:32

如果使用jquery:

代码语言:javascript
复制
var element = track_tmpl.replace('{{ x }}', i);
$(racetrack).append(element);

没有改变跑道div的innerHtml,而是所有元素都在移动。但是我不确定为什么..。

票数 0
EN

Stack Overflow用户

发布于 2014-01-28 13:47:31

theCoder已经很好地解决了代码的问题。

另外,您可以使用javascript手动构建所需的div,但是它更长。

代码语言:javascript
复制
for (var i = 0; i < this.noOfPlayers ; i++){
    var newTrack = document.createElement("div");
        newTrack.id = "track"+i;
        newTrack.className = "track";

        var newPlayer = document.createElement("div");
        newPlayer.id = "player"+i;
        newPlayer.className = "runner";

        newTrack.appendChild(newPlayer);
        racetrack.appendChild(newTrack);

        this.players.push(new Players(document.getElementById('player' + i), (120 + i)));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21405460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档