仅访问HTMLcollection中返回的项目的直接子项

时间:2017-10-14 10:03:27

标签: javascript xml htmlcollection

我希望获得所有直接子女的拳击手名单。

XML由外部源提供。我无法控制其内容或格式。

Boxer标签通过Match标签用作Group的直接子节点,也用作Group的孙子。

<Round PhaseID="2" ID="Round 1">
    <Boxer REF="2"/>
    <Boxer REF="3"/>
    <Boxer REF="4"/>
    <Boxer REF="1"/>

    <Group ID="1">
      <Boxer REF="1" NumInGroup="2" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
      <Boxer REF="4" NumInGroup="1" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
      <Match ID="1">
        <Boxer REF="1"/>
        <Boxer REF="4"/>
      </Match>
      <Match ID="2">
        <Boxer REF="4"/>
        <Boxer REF="1"/>
      </Match>
    </Group>
    ...
</Round>

当我使用

var groups = competitionDoc.getElementsByTagName("Group");  
var boxers = groups[0].getElementsByTagName("Boxer");

我得到名为&#34; Boxer&#34;的所有6个标签的列表它们是Group标签的后代。

我如何只获得Group的两个直接子女?

1 个答案:

答案 0 :(得分:0)

当我遍历group [g] .getElementsByTagName(&#34; Boxer&#34;)返回的所有元素时,我将parentElement信息转换为字符串,然后我可以使代码以第一个子字符串为条件。

将groupBoxers [gb] .parentElement变为字符串:

groupBoxers[gb].parentElement.outerHTML

返回,例如

<Group ID="1">
  <Boxer REF="1" NumInGroup="2" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>
  <Boxer REF="2" NumInGroup="1" NumVictories="0" NumMatches="2" PtsFor="0" PtsAgainst="0" GroupId="1"/>

  <Match ID="1">
    <Boxer REF="1"/>
    <Boxer REF="2"/>
  </Match>

</Group>

然后我遍历组[g] .getElementsByTagName(&#34; Boxer&#34;)返回的所有元素,我可以

  if (groupBoxers[gb].parentElement.outerHTML.substring(1,6) == "Group") {
     // do something with this Boxer - it is a direct child of a Group
  }