2014-04-05 33 views
0
设置动态生成的div顶部/左性能

已经搜查,在现场以及在互联网上,到目前为止任何运气再次搜索。无法通过jQuery的

我通过从原始HTML源克隆它们具有一组动态生成的div通过JQuery。 虽然我能够与possitioning性质从原来的div设置和播放,克隆那些不reponding在所有(既不是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数据被淡化:

"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
  • 通过this.mainHolderfor/in块(勘误表)变更的this.tilesHandler retourned JSON对象。
+0

你正试图设置一个属性为一个函数...我认为你想要执行的功能 –

+0

你的意思是使用'.position()'或'.position'作为你的数据中的一个对象'? – Terry

+0

data [tile] .position只是数据中的一个对象 – user2697714

回答

0

最后,是对extractId()功能的问题,尽管我已经测试和发布前再重新测试。

该函数正在重新渲染字符串的数字标识部分,但它应该是前一个字符的下划线。所以,最后,我得到了带有双下划线的id的克隆div。

对不便,并感谢您的努力。

0

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

而且,并非一定在那里data定义?是tile元素'DOMstyle属性?

请澄清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}); 
    } 
+0

通过使用自定义函数extractId(),克隆的div的ID确实发生了变化。所以没有重复的ID存在;这已经被测试,并且正常工作。 – user2697714

+0

@ user2697714变量'tile'元素的'DOM'' style'属性?用“引号”包围'css'属性是否改变了'css'属性? – guest271314

+0

data只是一个包含自定义函数getDataJsonServer正在减退的数据的json对象。其中的数据被妥善安排为一个瓷砖阵列,并且它也能正常工作。 tile只是for in区块的索引。 – user2697714