使用jQuery隐藏/显示元素

时间:2012-06-08 20:50:00

标签: javascript jquery

我有以下网站结构

<div id="movies">

     <a href="">
         <div>content</div>
     </a> 
     <a href="">
         <div>content</div>
     </a>
     ...    

</div>

a tags内最多可以有#movies var count = $("#movies a").length; if(count > 10){ for(i = 11; i <= count; i++){ $('#movies a:nth-child('+i+')').hide(); } $('#more').append('<a>show more</a>'); } $('#more a').click(function(){ var hidden = $("#movies a").filter(":hidden"); var count = 0; for(element in hidden){ if(count <= 10){ element.show(); } } }); 。我想只显示10并显示另一个 如果用户请求,则为10。

所以我提出了以下jquery代码。

Uncaught TypeError: Object 0 has no method 'show'

但这给了我{{1}}。有什么想法吗?我需要更改/添加什么来使这个想法有效?

4 个答案:

答案 0 :(得分:6)

你正在使用一些有点奇怪的做法:

  • 不要使用nth-child的循环;只需使用$("#movies a").slice(10).hide()
  • 使用hidden.each(function() { ... })而不是for in循环。在这里,您也可以使用.slice
  • 您不会增加count;它始终为0,因此if子句始终为真。

答案 1 :(得分:5)

您无法使用for(.. in ..)循环,因为它会遍历属性。使用jQuerys的每种方法:

hidden.each(function() {
     var element = $(this);
     if(count <= 10)
        element.show();
});

答案 2 :(得分:2)

尝试更简单的解决方案,如下所示

$(function () {
   $("#movies a:gt(9)").hide(); 

   var $moviesA = $('#movies a');
   $('#more a').click(function(){
        var $visibleA = $("#movies a :visible"); //Edit: added a space
        $moviesA.slice($visibleA.length, $visibleA.length + 10).show();
   });
});

DEMO: http://jsfiddle.net/fKuGT/1

答案 3 :(得分:0)

hidden是一个jQuery对象。不要使用for..in循环它。使用.each

hidden.each(function(){
    if(count <= 10){
        $(this).show();
    }
});