我试图弄清楚如何将.find()的结果子集作为数组返回。我有一个像这样的XML文档(这是here的练习):
<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
元素的所有内部文本的数组:
{"Amino acid motifs", "catalytic domain", "Clostridium tetani", "Dimerization", "Escherichia coli"}
假设data
是$.ajax()
为上述网址返回的XML,则此代码为:
$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
。我在这里做错了什么想法?
谢谢!
答案 0 :(得分:0)
要从所选元素的属性创建数组,您可以使用map()
:
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
不是函数。我在这里做错了什么想法?
这是因为当您使用括号表示法访问jQuery对象(在descriptors
变量中)时,您正在检索基础DOMElement。这没有text()
方法因此错误。相反,您可以使用jQuery的eq()
方法:
descriptors.eq(i).text();