我有一些工作代码,我正在尝试使用循环进行优化但是在连接参数名称时遇到问题。
var objlocations = {};
$.get('https://example.com/something/ajax-state?somevar=' + somevar, function(data) {
$.each(data, function(index,DBRow){
objlocations['point1x'] = DBRow.Point01X;
objlocations['point1y'] = DBRow.Point01Y;
objlocations['point2x'] = DBRow.Point02X;
objlocations['point2y'] = DBRow.Point02Y;
objlocations['point3x'] = DBRow.Point03X;
objlocations['point3y'] = DBRow.Point03Y;
objlocations['point4x'] = DBRow.Point04X;
objlocations['point4y'] = DBRow.Point04Y;
// There are about 30 more of these needed
var $grid = jQuery('#MyDiv');
$grid.empty();
for(var i=1;i<=4;i++) {
var x = objlocations['point' + i + 'x'];
var y = objlocations['point' + i + 'y'];
// doesnt' work: var x = 'DBRow.Point0'+i+'X';
// doesn't work: var y = 'DBRow.Point0'+i+'Y';
var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
$grid.append($PointLocation);
}
});
});
对于变量“x”和“y”,我想循环并直接使用DBRow.PointxX,而不是先将它们手动转储到对象中,因为需要超过60行。
根据代码中的注释,我尝试了var x ='DBRow.Point0'+ i +'X',这导致“x”将“DBRow.Point01X”等作为字符串值。
如果我尝试没有这样的引号:DBRow.Point0 + i + X我收到一个控制台错误,指出X未定义。
我还需要对DBRow.Point ## X上的前导0做一些事情,但我可以在我拉出的数据库中执行此操作。
我是Javascript的新手,所以希望这很简单,我忽略了。
编辑: 最终解决方案
$.get('https://example.com/something/ajax-state?somevar=' + somevar, function(data) {
$.each(data, function(index,DBRow){
var $grid = jQuery('#MyDiv');
$grid.empty();
for(var i=1;i<=32;i++) {
var ii = ('00'+i).slice(-2);
var x = DBRow["Point"+ii+"X"];
var y = DBRow["Point"+ii+"Y"];
var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
$grid.append($PointLocation);
}
});
});
答案 0 :(得分:1)
移动评论以回答更多解释。
javascript中的对象可以像命名数组项一样访问。
DBRow.Point01X与DBRow [&#39; Point01X&#39;]
相同您可以创建一个循环,准备名称然后插入到数组中。
例如:
i = (i < 10) ? ("0" + i) : i; // for leading zeros
var point = 'Point' + i + 'X';
objlocations['point'+i+'x'] = DBRow[point];
答案 1 :(得分:0)
for(var i=1;i<=4;i++) {
var xProperty = "Point0" + i + 'X';
var yProperty = "Point0" + i + 'Y';
var x = DBRow[xProperty];
var y = DBRow[yProperty];
var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
$grid.append($PointLocation);
}
由于属性是可变的而不是文字属性,因此您必须使用括号表示法而不是点符号。