编辑:请参阅下面的John S.回答这个明显问题背后的真正问题!
我正在使用sharepointplus构建动态表达式。它应该返回一个逻辑值,它就是这样。我已将它移动到变量中,因为我经常使用它(将其作为if的条件引用)。问题是,显然加号是停止处理其余代码。这是两个错误的片段(控制台中没有错误):
for (var i=0; i < data.length; i++){
var category_equal_test = ((data[i].getAttribute("category")) == (data[i+1].getAttribute("category")));
或
for (var i=0; i < data.length; i++){
var j=i+1;
var category_equal_test = ((data[i].getAttribute("category")) == (data[j].getAttribute("category")));
他们之间没有什么区别,但有那么一刻我觉得我会侥幸逃脱。 这是一段不破坏处理的代码片段(但当然这段代码毫无意义):
for (var i=0; i < data.length; i++){
var category_equal_test = ((data[i].getAttribute("category")) == (data[i].getAttribute("category")));
在破解代码的两种情况下,console.log(category_equal_test)输出我正在寻找的逻辑值集。
我认为这是我的某种能力,所以请赐教!感谢。
答案 0 :(得分:1)
这种情况正在发生,因为在循环的最后,data[i + 1]
变为未定义,而您无法{em>未定义 getAttribute
,所以它会抛出 TypeError 。
var x; x.getAttribute('foo');
// TypeError: Cannot call method 'getAttribute' of undefined
要解决此问题,请先使循环结束迭代;
for (var i = 0; i < data.length - 1; i++) {
// ...
}
至于为什么你没有在控制台中收到错误,代码必须包含在try..catch
的某个地方。
答案 1 :(得分:0)
这是我最终使用的内容。我希望这对某人有用!
function osDrawPageMenuLeft() {
var spquery = "";
$SP().list("menu","/content").get({fields:"name, link, Level, Order, category"},function(data) {
spquery += "<ul>";
var j=0;
for (var i=0; i < data.length; i++){
if( i < data.length-1){
j=i+1;
var category_equal_test = ((data[i].getAttribute("category")) == (data[j].getAttribute("category")));
}
else{
category_equal_test=false;
}
var link_empty_test = (data[i].getAttribute("link") == null);
var header = data[i].getAttribute("name");
var header_link = "<a href='" + data[i].getAttribute("link") + "'>" + header + "</a>";
var row = "<li><a href='"+data[i].getAttribute("link")+"'>"+data[i].getAttribute("name")+"</a></li>";
if(data[i].getAttribute('Level') == 'Header'){
if (((category_equal_test)&&(!link_empty_test))){
spquery += "<li>" + header_link + "<ul>";
}
else if(((!category_equal_test)&&(!link_empty_test))){
spquery += "<li>" + header_link + "</li>";
}
else if(((category_equal_test)&&(link_empty_test))){
spquery += "<li>" + header + "<ul>";
}
else if(((!category_equal_test)&&(link_empty_test))){
spquery += "<li>" + header + "</li>";
}
}
else{
if((!category_equal_test)){
spquery += row + "</ul></li>";
}
else{
spquery += row;
}
}
};
spquery += "</ul>";
$('#newleftNav').append(spquery);
});
}