[英]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].textContent
為var games = xmlDoc.find(gameMode).find("numberOfLevels:eq(0)").text()
,盡管它並不短,但更像jQuery。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.