我正在开展项目,我必须通过jQuery创建一个搜索引擎。在我开始循环遍历阵列之前,一切都很顺利。
我不知道我做错了,但出于某种原因,当我使用条件时,它不会输出我想要它说的语句。如果我更改条件以说明数组输出中是否存在某些内容,则确实如此。但是如果数组是空的,它绝对没有任何作用。那是为什么?
for(var i = 0, j = response.length; i < j; i++){
var searchItemRes = response[i];
if(response.length === 0){
$('' + '<ul>' +
'<li><span>Nothing found, try again</span></li>' +
'</ul>'
).appendTo(searchResults);
}
$('' + '<ul>' +
'<li><img src="" /><span> '+searchItemRes.title+'</span></li>' +
'</ul>'
).appendTo(searchResults);
}
答案 0 :(得分:2)
考虑一下:
// declare local variables
var str, i, item;
// build the HTML source code string
if ( response.length === 0 ) {
str = '<ul><li><span>Nothing found. Please, try again.</span></li></ul>';
} else {
str = '<ul>';
for ( i = 0; i < response.length; i += 1 ) {
item = response[i];
str += '<li><img src=""><span> ' + item.title + '</span></li>';
}
str += '</ul>';
}
// append the string to the DOM
$( searchResults ).append( str );
首先,在函数顶部声明局部变量。如您所见,我的代码使用了3个局部变量。
接下来,我怀疑你想为每个结果创建一个UL(列表持有者)。拥有一个包含所有结果的UL元素更有意义(这是我在上面的代码中实现的)。
另外,我建议最后只操作DOM - 应尽可能少地触摸live-DOM。因此,上面的代码构建HTML源代码字符串“off-DOM”,并且最后只将(整个)附加到DOM。
答案 1 :(得分:1)
for (var i = 0, j = response.length; i < j; i++){
var searchItemRes = response[i];
if (response.length === 0) {
$('<ul><li><span>Nothing found, try again</span></li></ul>').appendTo(searchResults);
}
...
}
永远不会执行该条件。如果i = 0
和j = response.length
并且它正在迭代i < j
,那么如果response.length == 0
它将不会进行迭代,因为0 < 0
将会突破循环。
答案 2 :(得分:0)
在response.length == 0
上触发的代码如何在循环中执行response.length
次?
也许你的意思是:
if (response.length === 0) {
$('<ul><li><span>Nothing found; try again</span></li></ul>').appendTo(searchResults);
}
else {
for (var i = 0, j = response.length; i < j; i++) {
var searchItemRes = response[i];
$('<ul>' +
'<li><img src="" /><span>' + searchItemRes.title + '</span></li>' +
'</ul>'
).appendTo(searchResults);
}
}