Javascript jquery显示更多/关闭错误

Javascript jquery显示更多/关闭错误,javascript,jquery,hide,show,Javascript,Jquery,Hide,Show,我为每个div编写了“显示更多”/“关闭”代码,并且当我打开一个,然后已经打开了一个先关闭,另一个打开时 问题是当我在同一个div中按close时,它重新打开了它,但没有关闭它。我还输入了代码。不是(这个),但实际上不起作用。问题还在于“滚动到”功能并不能很好地工作 如果我在第一个div上,只需滚动到第二个,然后按close键,它就会跳到文本的中间,而不是像它想象的那样跳到div的顶部 以下是jquery代码: $('.cities').each(function(){ var

我为每个
div
编写了“显示更多”/“关闭”代码,并且当我打开一个,然后已经打开了一个先关闭,另一个打开时

问题是当我在同一个
div
中按close时,它重新打开了它,但没有关闭它。我还输入了代码
。不是(这个)
,但实际上不起作用。问题还在于“滚动到”功能并不能很好地工作

如果我在第一个
div
上,只需滚动到第二个,然后按close键,它就会跳到文本的中间,而不是像它想象的那样跳到
div
的顶部

以下是jquery代码:

    $('.cities').each(function(){
    var max = 7;
    var numLi = $(this).find('li').length;
    var list = $(this).find('li:gt(' + max + ')');
    var id = '#' + $(this).attr('id');

    list.hide();
    if(numLi > max){
        $(this).find('ul').append('<a class="more" name="'+id+'">Show more</a>');
    }
    $(this).find('.more').click(function(){
        // zapre vse odprte
        $('.cities').find('li:gt(' + max + ')').not(this).hide('slow');
        $('.cities .more').not(this).text('Show more');

        list.toggle('slow');
        $(this).text($(this).text() == 'Show more' ? 'Close' : 'Show more');  

        $('html,body').animate({scrollTop: $(id).offset().top},'slow');
    }); 
});
$('.cities')。每个(函数(){
var max=7;
var numLi=$(this).find('li').length;
var list=$(this.find('li:gt('+max+'));
var id='#'+$(this.attr('id');
list.hide();
如果(numLi>max){

$(this).find('ul').append('

您可以使用
slideToggle()

绑定事件不必遍历每个元素。只需使用
$('.more')。
将事件绑定到所有类名为
more

编辑

$('.more').click(function(){
var max = 7;
    $('.more').not(this).each(function(){
        $(this).closest("ul").find('li:gt(' + max + ')').slideUp();
        $(this).text('Show more'); 
    });
    $(this).closest("ul").find('li:gt(' + max + ')').slideToggle();
    $(this).text($(this).text() == 'Show more' ? 'Close' : 'Show more');  
});

您可以使用
slideToggle()

绑定事件不必遍历每个元素。只需使用
$('.more')。
将事件绑定到所有类名为
more

编辑

$('.more').click(function(){
var max = 7;
    $('.more').not(this).each(function(){
        $(this).closest("ul").find('li:gt(' + max + ')').slideUp();
        $(this).text('Show more'); 
    });
    $(this).closest("ul").find('li:gt(' + max + ')').slideToggle();
    $(this).text($(this).text() == 'Show more' ? 'Close' : 'Show more');  
});

您可以使用
slideToggle()

绑定事件不必遍历每个元素。只需使用
$('.more')。
将事件绑定到所有类名为
more

编辑

$('.more').click(function(){
var max = 7;
    $('.more').not(this).each(function(){
        $(this).closest("ul").find('li:gt(' + max + ')').slideUp();
        $(this).text('Show more'); 
    });
    $(this).closest("ul").find('li:gt(' + max + ')').slideToggle();
    $(this).text($(this).text() == 'Show more' ? 'Close' : 'Show more');  
});

您可以使用
slideToggle()

绑定事件不必遍历每个元素。只需使用
$('.more')。
将事件绑定到所有类名为
more

编辑

$('.more').click(function(){
var max = 7;
    $('.more').not(this).each(function(){
        $(this).closest("ul").find('li:gt(' + max + ')').slideUp();
        $(this).text('Show more'); 
    });
    $(this).closest("ul").find('li:gt(' + max + ')').slideToggle();
    $(this).text($(this).text() == 'Show more' ? 'Close' : 'Show more');  
});

我如何才能做到所有打开的元素都只关闭,而完全单击的元素都必须显示或关闭。此外,我认为我还需要检查每个元素,因为如果它们只有4个元素,我不需要更多的按钮。就像在我的代码中一样,如果它们只有4个元素,则不追加显示更多/关闭,如果它们是8个,则追加显示更多/关闭。我如何做到这一切打开的只是关闭,完全单击必须显示或关闭。另外,我认为我仍然需要检查每个元素,因为如果它们只有4个元素,我不需要更多的按钮。就像在我的代码中一样,如果它们只有4个元素,则不追加显示更多/关闭,如果它们是8个追加显示更多/关闭。我如何做到这一点,所有打开的元素都只需关闭和精确y单击必须显示或关闭。此外,我认为我仍然需要检查每个元素,因为如果它们只有4个元素,我不需要更多按钮。就像在我的代码中一样,如果它们只有4个元素,则不追加显示更多/关闭,如果它们是8个追加显示更多/关闭。我如何才能做到所有打开的元素都只需关闭,而完全单击的元素必须显示或关闭关闭。我想我还需要检查每个元素,因为如果它们只有4个元素,我不需要更多的按钮。就像在我的代码中一样,如果它们只有4个元素,那么不要追加显示更多/关闭,如果它们是8个追加显示更多/关闭。