2013-06-10 3 views
0

Я создал сценарий навигации для викторины, в которой используются идентификаторы строк XML. Я определял массив с циклом и нажимал на него значение i ++, чтобы сохранить все идентификаторы строк. Подумав об этом, я подумал, что, если id отсутствует, изменив викторину. Итак, я создал скрипт, который определяет массив по идентификаторам строк. Это приводит к тому же массиву, потому что еще нет идентификатора. Но когда я перемещаюсь по викторине, он режет массив по-другому или, по крайней мере, с другим результатом.javascript slice делает разные вещи на тех же структурированных массивах

XML-файл структура:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <row id="1"> 
    <question img="images/vuilnisman.png" mp3="audio/WatDoetDeVuilnisman.mp3" ogg="audio/WatDoetDeVuilnisman.ogg">Wat doet de vuilnisman?</question> 
    <answer mp3="audio/HijTiltDeVuilnisbakInDeVuilnisauto.mp3" ogg="audio/HijTiltDeVuilnisbakInDeVuilnisauto.ogg">Hij tilt de vuilnisbak in de vuilnisauto.</answer> 
    </row> 
    <row id="2"> 
    <question img="images/tandarts.png" mp3="audio/WatZegtDeTandartsVaak.mp3" ogg="audio/WatZegtDeTandartsVaak.ogg">Wat zegt de tandarts vaak?</question> 
    <answer mp3="audio/UMagNuSpoelen.mp3" ogg="audio/UMagNuSpoelen.ogg">U mag nu spoelen.</answer> 
    </row> 
    <row id="3"> 
    <question img="images/zanger.png" mp3="audio/WatMaaktEenZangerGoed.mp3" ogg="audio/WatMaaktEenZangerGoed.ogg">Wat maakt een zanger goed?</question> 
    <answer mp3="audio/AlsHijGevoelKanLatenHoren.mp3" ogg="audio/AlsHijGevoelKanLatenHoren.ogg">Als hij gevoel kan laten horen.</answer> 
    </row> 
    <row id="4"> 
    <question img="images/schoonmaakster.png" mp3="audio/WatIsEenGoeieSchoonmaakster.mp3" ogg="audio/WatIsEenGoeieSchoonmaakster.ogg">Wat is een goede schoonmaakster?</question> 
    <answer mp3="audio/IemandDieGrondigSchoonmaakt.mp3" ogg="audio/IemandDieGrondigSchoonmaakt.ogg">Iemand die grondig schoonmaakt.</answer> 
    </row> 
    <row id="5"> 
    <question img="images/cassiere.png" mp3="audio/WaarMoetEenCassiereGoedOpLetten.mp3" ogg="audio/WaarMoetEenCassiereGoedOpLetten.ogg">Waar moet een cassière goed op letten?</question> 
    <answer mp3="audio/DatZeVoldoendeGeldTeruggeeft.mp3" ogg="audio/DatZeVoldoendeGeldTeruggeeft.ogg">Dat ze voldoende geld terug geeft.</answer> 
    </row> 
</root> 

У меня есть в общей сложности 39 строк.

петля для определения allRowIds массива:

rows.each(function() { 
     i++; 
     allRowIds.push(i); 
     //allRowIds.push($(this).attr('id')); 
    }); 

Когда я использую I ++ в качестве значений навигации работает отлично и когда я использую строка идентификатор значения это не имеет.

функции, чтобы получить первые строки идентификаторов:

function firstRowIds(allIds, maxRows) { //params array rowIds, int maxRows 
    var rowIds = allIds; 
    if(rowIds.length>maxRows) { 
     rowIds = allIds.slice(0, maxRows); 
    } 
    return rowIds; 
} 

функции, чтобы получить следующие строки идентификаторов:

function nextRowIds(allIds, currentIds, maxRows) { 
    var start = currentIds[maxRows-1], 
     end = start + maxRows, 
     nextIds = []; 
    return nextIds = allIds.slice(start, end); 
} 

функции, чтобы получить предыдущий ряд идентификаторы:

function prevRowIds(allIds, currentIds, maxRows) { 
    var end = currentIds[0]-1, 
     start = end - maxRows, 
     prevIds =[]; 
     return prevIds = allIds.slice(start, end); 
} 

некоторых хром, когда массив allRowIds определяется значениями идентификатора строки:

At start: 
allRowIds array 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 

currentIds array at start, retrieved whit the firstRowIds function 
1,2,3,4,5,6,7,8,9,10 
this are 10 ids becuase maxRows is set to 10. 

When clicked on next: 

currentIds 
11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 
This is so wrong it should be 11 - 20. 

nextIds array 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 
this is incorrect too this should be 21 - 30 

хром консоли данных, когда массив определяется значением я ++:

At start: 
allRowIds array 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 

currentIds array at start, retrieved whit the firstRowIds function 
currentIds 1,2,3,4,5,6,7,8,9,10 
this are 10 ids becuase maxRows is set to 10. 

When clicked on next: 
currentIds 11,12,13,14,15,16,17,18,19,20 
This is correct 

nextIds array 21,22,23,24,25,26,27,28,29,30 
this is also correct 

Может кто-нибудь сказать мне, почему это происходит и как это исправить. Спасибо.

ответ

2

Значения почти всех атрибутов являются строками.

Итак, когда вы заполнить список IdS из «ид» приписывать ваш список содержит строки «1», «2», и т.д.

Ваш рассчитывается следующий/предыдущий идентификатор (конечный параметр функции среза) неверно ,

function nextRowIds(allIds, currentIds, maxRows) { 
    var start = currentIds[maxRows-1], 
     end = start + maxRows, 
     nextIds = []; 
    return nextIds = allIds.slice(start, end); 
} 

В этом коде ваш конец не 10, 20 и т.д., но «91», «191» и т.д.

Вы можете изменить свой код для анализа значений из атрибутов, как это:

rows.each(function() { 
    allRowIds.push(+($(this).attr('id'))); 
}); 
+0

Thanx. является + ярлыком для parseInt? – Zeebats

+0

Не совсем. «+» - это еще один способ разобрать строки, и он сильнее, чем parseInt. Сравнить: + '12 .3.4 '= NaN; parseInt (12.3.4) = 12 –

Смежные вопросы