javascript结果数组仅打印最后一行XML,即使我使用0

javascript结果数组仅打印最后一行XML,即使我使用0,javascript,xml,html,Javascript,Xml,Html,我有一个字幕XML文件,它有start、dur和text来分配临时数组,然后将每个索引传递给字幕数组。当我想看到索引为0的字幕数组时,它应该打印包含start、dur和text的第一行文本,而不是打印最后一行文本。 错误的结果显示 467.071,3.643,感谢收看,请订阅,评分和评论 我尝试了索引50,但它仍然打印最后一行。我是否将其添加到错误的循环中 下面是前3行XML的示例(总文本行数为136) 你好,书呆子们。 在本视频中,我们';我们将制作各种颜色的发光棒 并解释关于它们的一

我有一个字幕XML文件,它有start、dur和text来分配临时数组,然后将每个索引传递给字幕数组。当我想看到索引为0的字幕数组时,它应该打印包含start、dur和text的第一行文本,而不是打印最后一行文本。 错误的结果显示

467.071,3.643,感谢收看,请订阅,评分和评论

我尝试了索引50,但它仍然打印最后一行。我是否将其添加到错误的循环中

下面是前3行XML的示例(总文本行数为136)


你好,书呆子们。
在本视频中,我们';我们将制作各种颜色的发光棒
并解释关于它们的一些有趣的观点。
这里是一个javascript示例

<script type="text/javascript">
            function loadXMLDoc(dname)
            {
                if (window.XMLHttpRequest)
                {
                xhttp=new XMLHttpRequest();
                }
                else
                {
                xhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xhttp.open("GET",dname,false);
                xhttp.send();

                return xhttp.responseXML;
            }

            function init()
            {
                var subtitleArray = new Array();
                var tempArray = new Array();
                var c = document.getElementById('container');

                captionsDoc = loadXMLDoc("captions.xml");
                x=captionsDoc.getElementsByTagName('text');

                for(i=0;i<x.length;i++)
                {
                    tempArray[0] = x[i].getAttribute('start');
                    tempArray[1] = x[i].getAttribute('dur');
                    tempArray[2] = x[i].childNodes[0].nodeValue;

                    subtitleArray[i] = tempArray;

                }


                c.innerHTML = subtitleArray[0];
            }
            window.onload = init;
        </script>

函数loadXMLDoc(dname)
{
if(window.XMLHttpRequest)
{
xhttp=newXMLHttpRequest();
}
其他的
{
xhttp=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xhttp.open(“GET”、dname、false);
xhttp.send();
返回xhttp.responseXML;
}
函数init()
{
var subtitleArray=新数组();
var tempArray=新数组();
var c=document.getElementById('container');
captionsDoc=loadXMLDoc(“captions.xml”);
x=captionsDoc.getElementsByTagName('text');

for(i=0;我只是猜测如何修复它:在for循环内初始化(可能还声明)
tempArray
,和/或将(i=0;…)的
更改为(var i=0;…)
成功了。我将declare tempArray放入for循环中。如果您想知道为什么会发生这种情况,那是因为当您分配
subtitarray[I]=tempArray;
subtitarray
的每个元素都指向同一个对象,因此在任何地方更改
tempArray
都会更改
subtitarray
的所有元素。通过在循环的每次迭代中创建一个新对象,
subtitarray
中的每个元素都将获得自己的
tempArray
与……合作。
<script type="text/javascript">
            function loadXMLDoc(dname)
            {
                if (window.XMLHttpRequest)
                {
                xhttp=new XMLHttpRequest();
                }
                else
                {
                xhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xhttp.open("GET",dname,false);
                xhttp.send();

                return xhttp.responseXML;
            }

            function init()
            {
                var subtitleArray = new Array();
                var tempArray = new Array();
                var c = document.getElementById('container');

                captionsDoc = loadXMLDoc("captions.xml");
                x=captionsDoc.getElementsByTagName('text');

                for(i=0;i<x.length;i++)
                {
                    tempArray[0] = x[i].getAttribute('start');
                    tempArray[1] = x[i].getAttribute('dur');
                    tempArray[2] = x[i].childNodes[0].nodeValue;

                    subtitleArray[i] = tempArray;

                }


                c.innerHTML = subtitleArray[0];
            }
            window.onload = init;
        </script>