Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript循环期间,我无法使用jQuery附加元素_Javascript_Jquery_Html_For Loop - Fatal编程技术网

在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会记住第一次附加后对象的状态。。。在循环过程中,我不能改变它,因为它将最后一个已知的对象插入到循环之外?