在javascript循环期间,我无法使用jQuery附加元素
有一个,但我仍然不明白为什么我不能做到以下几点:在javascript循环期间,我无法使用jQuery附加元素,javascript,jquery,html,for-loop,Javascript,Jquery,Html,For Loop,有一个,但我仍然不明白为什么我不能做到以下几点: var numLoaded = document.createElement('span') numLoaded = document.createElement('span') numLoaded.style= "color:red;font-weight:bold"; numLoaded.innerHTML = " Number of loade
var numLoaded = document.createElement('span')
numLoaded = document.createElement('span')
numLoaded.style= "color:red;font-weight:bold";
numLoaded.innerHTML = " Number of loaded results: "+0;
$("#resultsCounter").append(numLoaded)
for (var i = ((json.length)-1); i >= 0; i--) {
newDiv = document.createElement("div");
newDiv.id = +i+1;
newDiv.innerHTML = newDiv.innerHTML+"..."
numLoaded.innerHTML = " Number of loaded results: "+newDiv.id;
$("#resultsCounter").empty(); // should remove my span
$("#resultsCounter").append(numLoaded) // should add my span with new content
$("#results").prepend(newDiv)
}
在此之后,作为输出,我只看到整个循环结束后最后添加的元素。在循环迭代过程中,它不会将任何子对象附加到DOM,即使它已经被创建。我希望总是附加相同的元素
,但在每次迭代中都要使用更新的编号
为什么只有在循环结束后才将子元素添加到DOM中?如何在循环中更新它?我是否需要在每次循环迭代后重新创建该元素?这是加快这个过程的一种方法吗?这是因为在列表之前只创建一次元素。然后在循环中更改元素的
innerHtml
,并添加它-但是因为它是同一个元素(每次引用的是同一个JS对象),它实际上覆盖了自己
您只需移动这些创建元素的线:
var numLoaded = document.createElement('span')
numLoaded = document.createElement('span')
numLoaded.style= "color:red;font-weight:bold";
numLoaded.innerHTML = " Number of loaded results: "+0;
在循环内部。为什么不设置新的计数器值,比如$(element).text(counter),而不是带有append的.innerHTML?每次迭代都会覆盖您的跨度。这就是为什么你只看到最后一个元素。你想得到一个像进度条一样加载时会增加的计数器吗?@AlexSlipknot如果我没弄错,OP想看到的是:“1”,然后“1”消失,出现“2”,然后“2”消失,出现“3”,依此类推。@LelioFaieta是的。。。类似于进度条中的数字。。。但这有点特别,因为我倒计时是因为后面的
prepend()
。。。但感觉是samejs足够快,可以完成for循环的每个步骤,您将看不到中间的更改。这就是@AlexSlipknot建议您追加而不是重放的原因,直到不明白为什么在覆盖自身之后,被覆盖的元素中没有新值。。。如果它被新值覆盖,它应该在那里。。。但如果我想了解它…在循环之前,JS会记住第一次附加后对象的状态。。。在循环过程中,我不能改变它,因为它将最后一个已知的对象插入到循环之外?