循环并找到空数组

时间:2011-09-25 19:44:24

标签: javascript jquery

我正在开展项目,我必须通过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);
}

3 个答案:

答案 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 = 0j = 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);
    }
}