簡體   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