嗨,我遇到了问题,script.js给了我
<div id="gracze">
<div id="10" class="char" style="z-index: 19; top: 592px; left: 608px; "></div>
<div id="14" class="char" style="z-index: 25; top: 784px; left: 608px; "></div>
</div>
代替
<div id="gracze">
<div id="4" class="char" ... ></div>
<div id="10" class="char" style="z-index: 19; top: 592px; left: 608px; "></div>
<div id="14" class="char" style="z-index: 25; top: 784px; left: 608px; "></div>
</div>
get_players.php
4/62/6
10/19/19
14/19/25
的script.js
function get_players()
{
$.ajax({
type: "POST",
url: "get_players.php",
dataType: "html",
success: function(data) {
var str = data;
var chars = str.split("<br />");
var lol = chars.length;
for(var i = lol; i--; ) {
chars[i] = chars[i].split('/');
var o = document.getElementById(chars[i][0]);
var aimt = i;
if (!o) {
if (aimt!=chars.length-1 && aimt != 0) {
$('#gracze').html('<div id="'+chars[aimt][0]+'" class="char"></div>'+$('#gracze').html());
$('#'+chars[aimt][0]).css("top", chars[aimt][2]*32-16+"px");
$('#'+chars[aimt][0]).css("left", chars[aimt][1]*32+"px");
$('#'+chars[aimt][0]).css("z-index", chars[aimt][1]*32);
}
} else {
$('#'+chars[aimt][0]).animate({
"top": chars[aimt][2]*32-16+"px", "left": chars[aimt][1]*32+"px"
}, { duration: 275});
//$('#'+chars[aimt][0]).css("top", chars[aimt][1]*32-16+"px");
//$('#'+chars[aimt][0]).css("left", chars[aimt][2]*32+"px");
$('#'+chars[aimt][0]).css("z-index", chars[aimt][2]);
}
}
}});
setTimeout("get_players();", 1000);
}
我认为这是因为for(var i = lol; i--; ) {
答案 0 :(得分:1)
将循环更改为:
for(var i = lol - 1; i >= 0 ;i-- )
Javascript数组索引以0开头并以数组-1的大小结束(因此,如果数组有5个元素,则第一个将指数为0,最后一个指数为4)。
您的原始循环以数组的大小开始,立即递减(因此访问最后一个元素)。循环继续,直到变量递减到0,此时循环存在,没有使用第一个元素。
请参阅this page关于在javascript中循环数组。
此外,此条件if (aimt!=chars.length-1 && aimt != 0)
明确排除了最后一个元素。删除&& aimt != 0
。
答案 1 :(得分:0)
由于您正在进行反向循环,我会改为使用反向while
。
var i = chars.length;
while( i-- ) {
//...and so on
}
这样会更快,会在循环体内给出i
的正确值,并且仍会在适当的时间终止循环。
这样做的原因是我已经使用了一个后递减运算符。这意味着i
的值为:
while( i-- )
总是比这里的大1:
{
// ...and so on
}
因此,如果总长度为5
,则您将在块中包含正确的索引4
。
最后,当评估中i
为1
时,它将在块中为0
,表示最后一次迭代,它将项目放在第一个索引处。< / p>
下一个传递将在i
评估0
,并且该块中的代码将不会执行。