点击时更新DIV内容而不直接知道其ID

时间:2014-11-15 15:37:31

标签: javascript jquery html

我正在构建2D平铺游戏地图。每个图块都是2D数组中的div(var tiles = [])。下面是根据其他地方定义的一些参数构建一个tile的函数:

function Tile(rnd, px, py, nid) {
var self = this;
var _types = ["grass","forest","hills","swamp","forest", "mountains"];

var height = 60;
var width = 60;
var tileID = nid // new numeric tile id

var id = "tile_"+px+py+rnd; // old tile ID
var x = px;
var y = py;

var type = _types[rnd];
var img = 'img/maptiles/'+type+'.png';

this.Draw = function() {
    var div = $("<div class='tile'></div>");
    div.attr('id',tileID).data('type',type).data('x',x).data('y',y);
    div.get(0).tile = self;
    div.css({top:height*y, left:width*x});
    div.css({"background":"url('"+img+"')"});
    div.appendTo('#map-content');
};


this.Alert = function() {
    alert("Tile type: "+type+". Tile ID: "+tileID+" ");
};

this.Move = function(){ // moves player to available tile, in this case if player stands to a tile before the clicked one
    alert("start move! Tile type: "+type+". Tile ID: "+tileID+" ");
    if (playerPosition === tileID - 1) {
        $("#player").remove();
        $("#????")").append('<img id="player" src="Pictures/maptiles/player.png" />');
        playerPosition = tileID;
        alert("Player position now: " + playerPosition);

    }


};

}

结果我最终得到了由div组成的mxn map,每个div都有一个以1开头的唯一数字ID。我知道使用数字ID的元素是(是吗?)不赞成,虽然HTML5规范实际上不再禁止这个

现在我要做的是根据玩家的位置放置一个玩家图标(player.png)。起始位置是1,我使用tile(aka divs)数字ID来计算合法移动(只能移动到边框)。

单击图块时,将调用“移动”。它的目的是检查玩家是否可以移动点击的图块(现在只需要一个IF语句进行测试),并且必须删除player.png并在点击的div上重绘它。

这里我遇到了一个问题,因为我需要以某种方式使用tileID(等于Div ID)告诉浏览器追加属于被点击的DIV(因为我显然不会为每个div写一个函数领域)。我认为,因为我可以点击它获得DIV ID,我可以以某种方式使用它。

我试图尝试使用this.div.id:eq("+tileID+“),但没有运气。

UPD:

按要求添加点击处理程序。请注意,这是在var Map中,它负责构建地图,渲染和处理一些用户输入:

var Map = new function() {
var maxHorz = 20;
var maxVert = 5;

var tiles = [];
this.init = function() {
    for(var i=0; i<maxVert; i++) {
        tiles[i] = [];
        for(var j=0; j<maxHorz; j++) {
            tiles[i][j] = new Tile(Math.random()*6|0, j, i, tileID++);
        }
    }  

    Render();
    Setup();
};

this.GetMap = function() {
    return tiles;
};

var Render = function() {
    $.each(tiles, function(k,v){
        $.each(v, function(k,t){
            t.Draw(); 
        });
    });
};

var Setup = function(){
    $('#map-content').on('click','div.tile', function(e){
         //var tile = tiles[$(this).data('y')][$(this).data('x')];
         this.tile.Move();
    });
}

this.Redraw = function(x,y) {

};

}

Map.init();

1 个答案:

答案 0 :(得分:1)

最终找到答案:)

$('#player').detach().appendTo($('#'+tileID))