2016-04-20 12 views
3

.find()の結果のサブセットを配列として返す方法を理解しようとしています。find()を使用してXMLノードテキストを配列として返す

{"Amino acid motifs", "catalytic domain", "Clostridium tetani", "Dimerization", "Escherichia coli"} 

dataと仮定すると:

<MeshHeadingList> 
    <MeshHeading> 
     <DescriptorName MajorTopicYN="N" UI="D020816">Amino Acid Motifs</DescriptorName> 
    </MeshHeading> 
    <MeshHeading> 
     <DescriptorName MajorTopicYN="N" UI="D020134">Catalytic Domain</DescriptorName> 
    </MeshHeading> 
    <MeshHeading> 
     <DescriptorName MajorTopicYN="N" UI="D003017">Clostridium tetani</DescriptorName> 
     <QualifierName MajorTopicYN="N" UI="Q000201">enzymology</QualifierName> 
    </MeshHeading> 
    <MeshHeading> 
     <DescriptorName MajorTopicYN="N" UI="D019281">Dimerization</DescriptorName> 
    </MeshHeading> 
    <MeshHeading> 
     <DescriptorName MajorTopicYN="N" UI="D004926">Escherichia coli</DescriptorName> 
     <QualifierName MajorTopicYN="N" UI="Q000201">enzymology</QualifierName> 
    </MeshHeading> 
</MeshHeadingList> 

私がしたいことはDescriptorName要素の内部テキストのすべての配列である:私は(これはhereからexercptである)このようなXML文書を持っていますXMLは、上記URLのため$.ajax()によって返され、このコード:

$xml = $(data); 
var descriptors = $xml.find("DescriptorName"); 
console.log(descriptors); 

ログ

Amino acid motifscatalytic domainClostridium tetaniDimerisationEscherichia coli 

一方、descriptorsを反復してconsole.log(descriptors[i].text());をしようとするとdescriptors[i].text is not a functionことを示しています。私がここで間違っていることは何ですか?

ありがとうございます!あなたがmap()を使用することができ、選択した要素のプロパティから配列を作成するには

答えて

0

var descriptors = $xml.find("DescriptorName").map(function() { 
    return $(this).text(); 
}).get(); 
console.log(descriptors); // = [ "Amino Acid Motifs", "Catalytic Domain", ... ] 

一方、ディスクリプタを反復してconsole.log(descriptors[i].text());をしようとするとdescriptors[i].textは関数ではないことを示しています。私がここで間違っていることは何ですか?

あなたはブラケット表記を使用して(あなたのdescriptors変数に)jQueryオブジェクトにアクセスするときに、基礎となるDOMElementのを取得しているためです。これにはtext()メソッドがないため、エラーになります。 `同じ結果が得られたが、明らかに少ない効率的な方法になり

descriptors.eq(i).text(); 
+0

だからを反復処理し、'当量(使用):?代わりに、jQueryのeq()メソッドを使用することができますか – Yak

+0

それはまさにそれです。 –

関連する問題