0

xml を解析して 2 次元配列を作成しようとしましたが、なんらかの理由で関数が最初の項目を格納しません。(したがって、[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);​

コードもここにあります。

4

2 に答える 2

1

myArray[i] = [];これは、各反復で設定するためです。2番目のループではなくこのループに設定します$(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++;
    });
});
于 2012-07-09T10:02:41.803 に答える
0

コードの問題はmyArray[i] = [];行にあります。

この行を使用すると、反復ごとに配列を再定義します。

それを克服するための1つの解決策は書くことです

if(typeof(myArray[i]) === "undefined"){
    myArray[i] = [];
}

それが存在する場合、あなたがそれを書いているのではないことを確実にするために

更新されたフィドル

于 2012-07-09T10:06:00.450 に答える