我正试图找出如何将.find()的结果的子集作为数组返回。我有一个这样的xml文档(这是here中的exercpt):

<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()为上述url返回的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。你知道我做错什么了吗?
谢谢!

最佳答案

要根据选定元素的属性创建数组,可以使用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();

关于jquery - 使用find()返回XML节点文本作为数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36735686/

10-10 14:28