两种方案
方案1
- - -
1. 每一个页面一个单独的容器(div)。
<div class="content">
    <div class="page page-1">
        ...
    </div>
</div>2. 加载新页面时,首先检查该页面是否已经加载过了,例如加载页面4
// 代码仅为示意
if($('.page-4', '.content').length > 0) {
    $('.page', '.content').hide();
    $('.page-4', '.content').show();
} else {
    page4 = render_page(load_page(4)); //得到page4的结构
    $('.page', '.content').hide();
    $('.content').append(page4);
}这样在切换页面的时候就可以保存页面信息了。
方案2
- - -
创建一个对象来存放页面数据,并且让它支持自定义事件。当PAGE内容发生改变时,重新按照PAGE进行渲染。这实际上是一个MVC的方案。
下面的代码随手写的,只是为了示意。请勿直接使用。
// 可以用EventEmitter等等事件库来支持,我这里为了简单就用jQuery啦
var PAGE = $({
    current: -1,
    data: {}
});
PAGE.extend({
    fetch: function() {
        $.get('url', function(data) {
            this.data[current_page] = data
            this.trigger('value_change');
        })
    },
    show: function(page) {
        PAGE.current = page;
        if(this.data[page]) {
            this.trigger('value_change');
        } else {
            this.fetch(page);
        }
    },
});
PAGE.bind('value_change', function() {
    render_page();
});
var render_page = function() {
        if(PAGE[PAGE.current]) {
            //按照PAGE[PAGE.current]的内容渲染 div#page的内容
        } else {
            throw('error');
        }
    };
$('input[type="checkbox"]', '#page').change(function() {
    // 更新PAGE内容
    PAGE.data[current_page][item] = value
    PAGE.trigger(value_change);
});