Проблема в том, что вы нарезаете массив во время обратного отсчета. Подумайте об этом ... если вы берете индексную точку из массива, таким образом, сокращая ее на единицу, увеличивая i и переходя к следующей, вы на самом деле перемещаетесь на одну единицу дальше, чем вы хотите, полностью пропуская следующий индекс. Увеличьте i--
, начните с query.length-1
и установите условие i>=0
. Для примера этого в действии, проверьте это здесь:
http://jsfiddle.net/kcwjs/
CSS
input {
width:300px;
}
HTML
<input id="textbox" type="text" />
<div id="message"></div>
Javascript
$(document).ready(function() {
$('#textbox').keyup(checkStrings);
});
function checkStrings(e) {
var typed = $('#textbox').val();
if (typed == "") return false;
var query = typed.split(" ");
var querylen = query.length;
var acceptedWords = '';
var badWords = '';
for (var i = querylen-1; i >= 0; i--) {
if (query[i].length < 3) {
badWords += query[i] + " ";
} else {
acceptedWords += query.splice(i,1) + " ";
}
}
$('#message').html("<div>Bad words are: " + badWords + "</div>" +
"<div>Good words are: " + acceptedWords + "</div>");
}