0

jQueryを使用してXMLを操作しようとしています。Question特に、タグの値をグループ化して、ヘッダーとしてGroupNameのjQueryアコーディオンと、コンテンツとしての質問を作成できるようにしたいと思います。GroupNameGroupName

XML:

<?xml version="1.0"?>
<GenericFormData>
  <UserQuestions>
    <UserQuestion>
      <BoxID>Box_1_6</BoxID>
      <Question>Refund requested?</Question>
      <FieldType>3</FieldType>
      <GroupName/>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_1_7</BoxID>
      <Question>Would you like to receive forms?</Question>
      <FieldType>3</FieldType>
      <GroupName/>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_2_14</BoxID>
      <Question>Listing nihil?</Question>
      <FieldType>3</FieldType>
      <GroupName>VIII</GroupName>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_2_15</BoxID>
      <Question>Creation date</Question>
      <FieldType>2</FieldType>
      <GroupName>Date and signature</GroupName>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_2_16</BoxID>
      <Question>Name of the person signing</Question>
      <FieldType>0</FieldType>
      <GroupName>Date and signature</GroupName>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_2_17</BoxID>
      <Question>function of the person signing</Question>
      <FieldType>0</FieldType>
      <GroupName>Date and signature</GroupName>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box_2_18</BoxID>
      <Question>Phone number of the person signing</Question>
      <FieldType>0</FieldType>
      <GroupName>Date and signature</GroupName>
    </UserQuestion>
    <UserQuestion>
      <BoxID>Box99</BoxID>
      <Question>Liability</Question>
      <FieldType>1</FieldType>
      <GroupName>VII</GroupName>
    </UserQuestion>
  </UserQuestions>
</GenericFormData>

jQuery:

$(xmlDoc).find('GroupName').filter(function () {
    return $(this).text() === groupnames[i].toString();
}).parents().find('UserQuestion').each(function () {
    //logic to display `Question` goes here
});

しかし、それは本来のようには機能しません。私は繰り返し処理してgroupnamesいます(必要に応じて一意の値が含まれています)が、each()メソッドの結果が多すぎます。誰かが私が間違っているのを見ますか?とても有難い。

4

1 に答える 1

1

問題

私が正しく理解していれば; あなたの間違いは3行目にあると思います

}).parents().find('UserQuestion').each(function () {
         ^----------------------^

現在、すべてを選択していますがparents()、基本的には

一致した要素の現在のセット内の各要素の祖先を取得します。オプションでセレクターによってフィルター処理されます。

これは、親を選択することにより、より高い要素を取得することを意味します。これによりUserQuestion、以前のフィルタリングは冗長であると見なされます。

解決

groupNameそれが直接の子になると判断できる場合は、代わりに、を使用parent()して複数形を削除できます。UserQuestionまたは、これが保証されていない場合は、現在のステートメントにセレクターを追加して、次のようにsのみを選択することができます。

$(xmlDoc).find('GroupName').filter(function () {
    return $(this).text() === groupnames[i].toString();
}).parents('UserQuestion').each(function () {
    //logic to display `Question` goes here
});
于 2013-03-06T08:45:36.640 に答える