繁体   English   中英

如何使用jQuery选择器/过滤器在XML中找到特定的子节点?

[英]How can I find a specific subnode in XML with jQuery selectors/filters?

我有以下XML游戏模式:

<?xml version="1.0" ?>
<gameType>
<easy>
    <numberOfLevels>2</numberOfLevels>
    <levelGroup id="1">
        <level id="1">[0]</level>
        <level id="2">[1]</level>
        <level id="3">[2,2]</level>
    </levelGroup>
    <levelGroup id="2">
        <level id="1">[0]</level>
        <level id="2">[1]</level>
        <level id="3">[3,2]</level>
    </levelGroup>
</easy>
<medium>
    <numberOfLevels>1</numberOfLevels>
    <levelGroup id="1">
        <level id="1">[0,2]</level>
        <level id="2">[1,4]</level>
        <level id="3">[2,5,6]</level>
    </levelGroup>
</medium>

我想要做的是获取适当游戏模式的所有关卡。 例如:

//we get the list of all games
var xmlDoc = $(xml);
//we get number of levels for the selected game mode, default gameMode = 'easy'
var games = xmlDoc.find(gameMode).find("numberOfLevels")[0].textContent;
//we select a game by choosing a random number
var selectedGameIndex = $.random(games);
//Here I want to filter out only the appropriate elements, eg, in the default
//game mode and with the selectedGameIndex set to '1', I want to return an
//array that contains only the values, 
//eg. var resultArray = [[0],[1]....[2,11,12]]; What I got is this:

var elements = sandbox.baseLib.$(gameMode + " > levelGroup[id='"
    + selectedGameIndex + "']", xmlDoc).children();
 var predefinedIndexSequence = elements.map(function() {
    return sandbox.baseLib.$(this).text();
}).get();

gameLength = gameSequence.size();

编辑:这是正确的代码(至少对于我需要它)。 错误是当我实际上不需要过滤器的结果,而是需要由“ elements”变量组成的数组时,尝试过滤xmlDoc。

您可以使用.map()来简化代码的最后一部分(从var levelsArray开始

return elementsArray.map(function() {
    return $(this).text();
});

...尽管我将其称为$elements而不是elementsArray因为它看起来实际上是一个jQuery对象,而不是真正的数组。 如果我错了,而且它不是jQuery对象,请改为执行以下操作:

return $.map(elementsArray,function(el,i) {
    return el.textContent;
});

您也可以将var games = xmlDoc.find(gameMode).find("numberOfLevels")[0].textContentvar games = xmlDoc.find(gameMode).find("numberOfLevels:eq(0)").text() ,尽管它并不短,但更像jQuery。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM