0

在 ie8 中,我正在抛出以下消息

“此页面上的脚本导致 Internet Explorer 运行缓慢”

当更改触发以下代码的选择框时会发生这种情况,我知道使用 php 执行此操作会更好,但不幸的是,这不是一个选项。

代码显示从下拉列表中选择的场地上传递的事件。选择场地后,所有不在该场地的活动都将被隐藏。

代码运行的页面是http://sussexpast.co.uk.blueplanetdns.com/events

谢谢

jQuery(function($) {

    function hideMonths(){
        var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
        for( var i = 0; i < months.length; i++ ){
            //alert(months[i]);
            $('.events-list .post:visible .event-month:contains('+months[i]+')').not(':first').css('visibility','hidden');
        }
    }

    $(document).ready(function(){
        hideMonths();
    });

    $('.event-location-filter select').change( function() {
        var selectedProperty = $(this).val();
        //alert(selectedProperty);
        $('.post').each( function(){
            $(this).show()
            var eventProperty = $(this).find('.venue a').text();
            //alert(eventProperty);
            if( selectedProperty == 'Select a location' ){
                $(this).show()
                hideMonths();
            }
            else{
                if( eventProperty !== selectedProperty ){
                    $(this).hide()
                    $('.events-list .event-month').css('visibility','visible');
                    hideMonths();
                }
            }
        });
    });

});
4

1 回答 1

1

缓存大部分选择器,这样每次迭代都不会搜索整个 dom。

function hideMonths(){
    var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    var $eventMonths = $('.events-list .post:visible .event-month').not(':first');
    for( var i = 0; i < months.length; i++ ){
        //alert(months[i]);
        $eventMonths.filter(':contains('+months[i]+')').css('visibility','hidden');
    }
}

我也认为没有理由为每个帖子都这样做,而是在.each.

    $('.post').each( function(){
        $(this).show()
        var eventProperty = $(this).find('.venue a').text();
        //alert(eventProperty);
        if( selectedProperty == 'Select a location' ){
            $(this).show()
            //hideMonths();
        }
        else{
            if( eventProperty !== selectedProperty ){
                $(this).hide()
                $('.events-list .event-month').css('visibility','visible');
                //hideMonths();
            }
        }
    });
    hideMonths();
于 2013-04-16T15:20:16.947 回答