我正在编写 JS 代码,该代码读取 XML文件并从中提取所需信息,我想找到所选项目的名称< / em>,这是我的代码:
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文件中的元素。
答案 0 :(得分:1)
至少你的for循环看起来很奇怪
// Always use them like this
for (var i = 0;i < arr.length;i++){
// do stuff with arr[i]
}
请参阅你的第一个for循环
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
运算符来比较i和arr.length,则无需从<
减少。不是<=
运营商。在你的第二个循环中,你将超出数组的范围。
你到达那里的另一个奇怪的事情。当你遍历猫阵列时。
for(j=0;j<=cats.length;j++) {
if(selecteditem == realnames[j]) {
selecteditem = cats[j];
}
}
您正在使用realNames[]
数组的迭代器j
引用cats[]
数组。虽然理论上如果你总是在2个不同的数组中得到相同数量的cats[]
和realNames[]
并且你从不对它们进行排序,它们总是真的相互映射1对1,但这种方法很容易受到影响。对于错误,这看起来不像是一种可靠的方式。当然,for循环超出范围。如前所述。