我有以下网站结构
<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}}。有什么想法吗?我需要更改/添加什么来使这个想法有效?
答案 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();
});
});
答案 3 :(得分:0)
hidden
是一个jQuery对象。不要使用for..in
循环它。使用.each
。
hidden.each(function(){
if(count <= 10){
$(this).show();
}
});