繁体   English   中英

无法通过jquery在动态生成的div上设置top / left属性

[英]Unable to set top/left properties on dynamically generated div through jquery

已经通过该网站,互联网以及任何运气进行了一次又一次的搜索。

我有一组通过JQuery通过从原始html源克隆它们而动态生成的div。 尽管我可以设置并使用原始div的possitioning属性,但是尽管我可以毫无问题地选择它们,但克隆的属性根本没有响应( heightwidth属性均无响应)。

这是原始的HTML

<div style="width: 504px; height: 252px; left: 333px; top: 135px;" id="mainHolder">
    <div style="width: 504px; height: 252px;" id="holder">
        <div style="width: 126px; height: 63px;" id="idTile_5369" class="tile"></div>
        <div style="width: 126px; height: 63px;" id="idTile_5373" class="tile"></div>
        <div style="width: 126px; height: 63px;" id="idTile_5377" class="tile"></div>
        <div style="width: 126px; height: 63px;" id="idTile_5381" class="tile"></div>                   
    </div>
    <div id="holderHandler"></div>
</div>

以下是适用的CSS规则:

#mainHolder{
    position: relative;
}
#holder, #holderHandler, .tile, .tileHandler{
    position: absolute;
}

这里的JS代码:

getDataJsonServer('tiles.php', (function(data){ //getDataJsonServer --> custom function to obtain json data from the server through the JQuery getJson method
    var mainHolder=$('#mainHolder');
    var tilesHandler=$('#holder .tile', this.mainHolder).clone();
    tilesHandler.addClass('tileHandler');
    tilesHandler.removeClass('tile');
    tilesHandler.attr('id', function(i, idTileHandler){ return 'idTileHandler_'+extractId(idTileHandler); }); //extractId -->  custom function that extracts the id
    $('#holderHandler', this.mainHolder).append(tilesHandler);

    for(var tile in data){
        $('#idTile_'+data[tile].idTile, this.mainHolder).css({left: data[tile].position.left, top: data[tile].position.top});
        $('#idTileHandler_'+data[tile].idTile, this.mainHolder).css({left: data[tile].positionHandler.left, top: data[tile].positionHandler.top});
    }
}

最后,在这里, Json数据由tiles.php

"data": [{
    "idTile": 5369,
    "position": {
        "left": -62,
        "top": 0
    },
    "positionHandler": {
        "left": -62,
        "top": 0
    }
},
"idTile": 5373,
    "position": {
        "left": -62,
        "top": 0
    },
    "positionHandler": {
        "left": -62,
        "top": 0
    }
},
"idTile": 5377,
    "position": {
        "left": -62,
        "top": 0
    },
    "positionHandler": {
        "left": -62,
        "top": 0
    }
},
"idTile": 5381,
    "position": {
        "left": -62,
        "top": 0
    },
    "positionHandler": {
        "left": -62,
        "top": 0
    }
}]

尽管for/in循环中的最后一行运行正常,但另一行只是不设置lefttop属性,而不会引发任何错误消息。

为什么会发生这种情况? 是否由于我怀疑第二个div是动态生成的事实? 我该如何解决?


编辑:

  • 添加了tiles.php的Json对象
  • 改变this.tilesHandler通过this.mainHolderfor/in块(勘误表)。

注意并非一定,如果id的的clone倒是元件已经被改变或不以上述片,但出现可能已被改变,使得没有2 id的与文件相同的值,之后.clone()

另外,不确定在哪里定义data tile的元素DOM style属性?

请说明什么是datatile变量。 谢谢

也许第一次尝试引用css属性?

尝试

for(var tile in data){
        $('#idTile_'+data[tile].idTile, this.tilesHandler).css({"left": data[tile].position.left, "top": data[tile].position.top});
        $('#idTileHandler_'+data[tile].idTile, this.tilesHandler).css({"left": data[tile].positionHandler.left, "top": data[tile].positionHandler.top});
    }

最后,尽管我在发布之前进行了测试并再次进行了测试,但这仍然是extractId()函数的问题。

该函数将字符串的数字id部分重绕为应有的样子,但在其前加上下划线字符。 因此,最后,我得到了带有双下划线的id的克隆div。

给您带来的不便,我们深表歉意。感谢您的努力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM