Я пишу JS- код, который читает XML файл и извлекает из него необходимую информацию, я хочу найти имя выбранного элемента, это мой код:
function initialize() {
ct = $('menu').children().length;
for(cati=0;cati<=ct-1;cati++) {
cats[cati] = $('menu').children().eq(cati).prop('nodeName');
}
var selecteditem = $(".selected").text();
for(j=0;j<=cats.length;j++) {
if(selecteditem == realnames[j]) {
selecteditem = cats[j];
}
}
$("#gallery").empty();
alert($('menu').find(selecteditem).prop('nodeName'));
}
здесь, в моем коде при предупреждении с использованием последнего stmt есть два сценария, первый - когда условие if statement
не достигнуто, и в этом случае предупреждение дает мне желаемый результат (выбранный элемент), но когда if statement
состояние достигнуто, оповещение дает мне undifined
хотя я уверен, что cats[j]
является элементом в файле XML.
По крайней мере, ваши циклы выглядят странно
// Always use them like this
for (var i = 0;i < arr.length;i++){
// do stuff with arr[i]
}
Смотрите, в вашем первом цикле вы получили
for (var i = 0;i <= arr.length-1;i++){
// do stuff with arr[i]
}
А во втором
for (var i = 0;i <= arr.length;i++){
// do stuff with arr[i]
}
Вы должны придерживаться одного способа объявления for loops
. Нет необходимости сокращать из arr.length
если вы используете <
operator для сравнения я и arr.length. Не <=
оператор. Во втором цикле вы выходите из границ массива.
Еще одна странная вещь, которую вы получили там. Когда вы зацикливаете массив кошек.
for(j=0;j<=cats.length;j++) {
if(selecteditem == realnames[j]) {
selecteditem = cats[j];
}
}
Вы ссылаетесь на realNames[]
с итератором j
массива cats[]
. Хотя теоретически это может работать, если вы всегда получали одинаковое количество cats[]
и realNames[]
в 2 разных массивах, и вы никогда не сортируете их, и они всегда действительно сопоставляют друг с другом 1 к 1, но этот подход уязвим для ошибок, этот не выглядит надежным способом обойти это. Плюс, конечно, цикл for выходит за пределы. Как упоминалось ранее.
realnames
?true
.