.first('li)选择列表中的第一项不起作用

时间:2012-03-06 11:51:30

标签: javascript jquery

希望您能提供帮助,此代码无效。它正在选择下一个图像,但是如果它在最后一个图像上并且没有“下一个图像”,那么我想选择“li”中的第一个图像。我添加了一个if条件:if(nextLi.value!=='')...但这似乎不起作用。

    function nextImg(){         
    $('#background').find('img').animate({'opacity': 0}, 500, function (){
        var nextLi = $('.sel').parent().parent().next('li').find('a');

        if (nextLi.value !=='') {
            var nextLiA = nextLi.attr('rel');
            $('#background').find('img').attr({'src':nextLiA});
            $('.sel').appendTo(nextLi); 
        } else {
            var nextLi = $('.sel').parent().parent().first('li').find('a');
            var nextLiA = nextLi.attr('rel');
            $('#background').find('img').attr({'src':nextLiA});
            $('.sel').appendTo(nextLi); 
        }
    });
}

3 个答案:

答案 0 :(得分:0)

您应该使用length代替,执行:

if (!nextLi.length){
//do stuff
}

如果选择为空nextLi.length将返回0(即false),那么您添加!

答案 1 :(得分:0)

nextLi是一个jQuery对象。如果你想看看它是否包含任何元素,即,如果有什么东西与你使用的选择器匹配,那么只需检查它的.length属性:

if (nextLi.length > 0 ) {

另请注意,if块中的三行与else的最后三行相同,因此您可以按如下方式简化代码:

    if (nextLi.length === 0) {
        nextLi = $('.sel').parent().parent().first('li').find('a');
    }
    $('#background').find('img').attr({'src': nextLi.attr('rel') });
    $('.sel').appendTo(nextLi); 

(我已完全删除nextLia变量,因为它仅用于一个地方 - 您可以在设置nextLi.attr('rel')属性时直接使用src。)

答案 2 :(得分:0)

试试这个。它检查li的大小,如果没有找到任何内容,则选择第一个。

function nextImg(){         
    $('#background').find('img').animate({'opacity': 0}, 500, function (){
        var li = $('.sel').parent().parent().next('li').find('a'); 

        if(li.length == 0) {
           //if there is not last item  
           li = $('.sel').parent().parent().first('li').find('a'); //get the first item
        } 
        var liA = li.attr('rel');
        $('#background').find('img').attr({'src':liA});
        $('.sel').appendTo(li); 

    });
}