2017-02-27 169 views
-3

您能否告诉我为什么:lt()无法正常工作。这里是我的代码: https://jsbin.com/refunuyahe/edit?html,js,output为什么:lt()不按预期工作?

我试着只显示100项目,而当用户滚动它应该显示另外100个项目。

(function() { 
    'use strict'; 
    $(function() { 
    var str = '<ul id="myList">'; 
    var x = 100; 
    var initialData = ''; 
    for (var i = 0; i < 1000; i++) { 
     str += '<li>' + i + '</li>'; 

    } 
    str += '</ul>' 
    // complete data in str; 
    // load only first 100 element 
    $('#container').append(str); 

    $('#myList li:lt(' + x + ')').show(); 
    }) 

    $('#container').on('scroll', function() { 
    if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) { 
     x += 100; 
     $('#myList li:lt(' + x + ')').show(); 
    } 
    }) 
})(); 

这条线为什么不起作用?

$('#myList li:lt(' + x + ')').show(); 
+0

添加您的html并让我知道 –

+0

[** Demo **](https://jsfiddle.net/tusharj/zyqpr9ya/) – Tushar

+2

'x'不在最后一个事件处理程序的范围内。另外,如果你一次显示100个元素,你的'if'语句将不会执行任何操作,因为你正在选择的'li'已经显示 –

回答

-2

我真的怀疑这是否是正确的方法来实现你真正想做的事情。无论如何,你会错过隐藏的元素。

(function(){ 
 
    'use strict'; 
 
    $(function(){ 
 
    var str ='<ul id="myList">'; 
 
    var x=100; 
 
    var initialData =''; 
 
    for(var i=0;i<1000;i++){ 
 
     str+='<li>'+i+'</li>'; 
 

 
    } 
 
    str +='</ul>' 
 
    // complete data in str; 
 
    // load only first 100 element 
 
    $('#container').append(str); 
 
    $('#myList li:gt('+x+')').hide(); // <-- first hide rest of li's 
 
    $('#myList li:lt('+x+')').show(); 
 
    }) 
 
    
 
    $('#container').on('scroll', function() { 
 
     if($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) { 
 
     x+=100; 
 
     // HERE you need to hide elements as well 
 
      $('#myList li:lt('+x+')').show(); 
 
     } 
 
    }) 
 
    
 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='container'> 
 
    </div>

+1

不工作。当滚动到列表的末尾时,应显示下100个元素。 – Tushar

+0

如果OP自己做,它会更好,请在CODE中找到我的评论。我只是指出他并没有隐藏不需要的LI。此外,请避免勺子喂养,以便人们可以实际学习, –

+0

确定离开它..感谢您的帮助..是有什么方法来加载或进入'DOM'当用户像懒惰加载到底部..实际上目前所有数据在dom.but – user5711656

0

主要有两个问题与您的代码。首先x变量超出了scroll事件处理程序的范围。其次,li元素在加载时已经可见,因此在其上调用show()将不起作用。

要解决此问题,请将x定义放在更高的范围内,并使用CSS仅在页面加载时显示相关元素。试试这个:

$(function() { 
 
    'use strict'; 
 
    var x = 100; 
 
    var str = '<ul id="myList">'; 
 
    for (var i = 0; i < 1000; i++) { 
 
    str += '<li>' + i + '</li>'; 
 
    } 
 
    str += '</ul>' 
 
    $('#container').append(str); 
 

 
    $('#container').on('scroll', function() { 
 
    if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) { 
 
     x += 100; 
 
     $('#myList li:lt(' + x + ')').show(); 
 
    } 
 
    }) 
 
});
#container { 
 
    height: 300px; 
 
    border: 1px solid; 
 
    overflow: auto; 
 
} 
 

 
.hide { 
 
    display: none; 
 
} 
 

 
.showItem { 
 
    display: block; 
 
} 
 

 
/* This is the required part */ 
 
#container li:nth-child(-n+100) { 
 
    display: list-item; 
 
} 
 
#container li { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='container'></div>

另外请注意,我收拾你的IIFE和处理的document.ready使用。

+0

谢谢@ rory .. !!实际上这里在你的情况''1000'项存在'DOM'.is有任何方法只有'100'项目在第一次来。当用户滚动然后加载更多的数据在DOM – user5711656

+0

这是正确的 - 我只是修复错误你的原始逻辑 –

+0

好的..感谢您的帮助。有没有办法做到这一点,或者我会使用插件 – user5711656

相关问题