我尝试通过解析xml来填充二维数组,但我的函数不会出于某种未知原因存储第一个项目。 (因此它正确存储[0] [1]和[1] [1],但它不存储[0] [0]和[0] [1]);
阵列结构背后的想法是:
first word- > first choice ->[0][0];
first word -> second choice ->[0][1];
second word -> first choice ->[1][0];
... you can guess
每次都会发出警报(只是为了检查计数器是否正确。)
XML:
<?xml version="1.0" encoding="utf-8" ?>
<Page>
<Word id = "0">
<Choice id = "0">
<text>First word - 1. choice</text>
</Choice>
<Choice id = "1">
<text>First word - 2. choice</text>
</Choice>
</Word>
<Word id= "1">
<Choices>
<Choice id = "0">
<text>Second word - First choice</text>
</Choice>
<Choice id= "1">
<text>Second word - Second Choice</text>
</Choice>
</Choices>
</Word>
</Page>
功能:
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "xml.xml",
dataType: "xml",
success: parseXml2
});
});
function parseXml2(xml) {
var myArray = [];
var a = 0;
$(xml).find("Word").each(function() {
var i = $(this).attr("id");
a = 0;
$(this).find("Choice").each(function() {
alert('I:' + i + 'A:' + a);
alert('Id:' + $(this).attr("id") + $(this).text());
myArray[i] = [];
var text = $(this).text();
myArray[i][a] = text;
a++;
});
});
alert(myArray[0][0]);
}
parseXml2(xml);
也可以找到代码here。
答案 0 :(得分:2)
这是因为您在每次迭代时都设置了myArray[i] = [];
。将它设置在此循环$(xml).find("Word").each(function() {
而不是第二个循环中。 vágod:D?
这应该有效:
$(xml).find("Word").each(function() {
var i = $(this).attr("id");
a = 0;
myArray[i] = [];
$(this).find("Choice").each(function() {
alert('I:' + i + 'A:' + a);
alert('Id:' + $(this).attr("id") + $(this).text());
var text = $(this).text();
myArray[i][a] = text;
a++;
});
});
答案 1 :(得分:0)
代码中的问题在于myArray[i] = [];
行。
使用此行,您将在每次迭代时重新定义数组。
克服这个问题的一个解决方案就是写
if(typeof(myArray[i]) === "undefined"){
myArray[i] = [];
}
为了确保你没有写它是否存在