如何在页面刷新时保留 javascript/jquery 对 DOM 所做的更改

2024-01-29

我的问题是当我单击链接时(例如第二页)它将在屏幕上显示第二页。但是当我重新加载页面时,当前页面不会保存,并且会恢复为默认页面。

如何防止所需页面刷新到默认页面?

JavaScript:

<script type="text/javascript"> 
    $(function(){
        $('.one').show();
        $('.two').hide();
        $('.three').hide();
        $('#show_one, #show_one1').click(function(){
            $('.one').show();
            $('.two').hide();
            $('.three').hide();
            $('.modal').modal('hide');
            return false;
        });
        $('#show_two, #show_two2').click(function(){
            $('.one').hide();
            $('.two').show();
            $('.three').hide();
            $('.modal').modal('hide');
            return false;
        });
        $('#show_three, #show_three3').click(function(){
            $('.one').hide();
            $('.two').hide();
            $('.three').show();
            $('.modal').modal('hide');
            return false;
        });
    });
</script>

HTML:

<nav class="navbar navbar-default" role="navigation">
        <div class="container-fluid">

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="" id="show_one"> One</a></li>
                <li><a href="" id="show_two"> Two</a></li>
                <li><a href="" id="show_three"> Three</a></li>
            </ul>

            <ul class="nav navbar-nav navbar-right">
                <a data-toggle="modal" data-target="#myModal"> Modal Dialog</a>
            </ul>
        </div>
        </div>
    </nav>


<div class="container">
                <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
                    <div class="modal-dialog">
                        <div class="modal-content">
                            <div class="modal-body">
                                <form class="form-horizontal">
                                    <div class="form-group">
                                        <div class="col-sm-offset-2 col-sm-10">
                                            <button type="button" id="show_one1" class="btn btn-info" data-dismiss="modal" aria-hidden="true">One</button>
                                            <button type="button" id="show_two2" class="btn btn-info" data-dismiss="modal" aria-hidden="true">Two</button>
                                            <button type="button" id="show_three3" class="btn btn-info" data-dismiss="modal" aria-hidden="true">Three</button>
                                        </div>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
</div>

<div class="container">
        <div class="one">
            <div class="row">
                <center>
                    Page 1
                </center>
             </div>
        </div>
        <div class="two">
            <div class="row">
                <center>
                    Page 2
                </center>
             </div>
        </div>
        <div class="three">
            <div class="row">
                <center>
                    Page 3
                </center>
             </div>
        </div>
</div>

当您使用 JavaScript 更改 DOM 的状态时,它将在页面重新加载时重置为实际状态。如果你希望能够存储这个状态并在重新加载时以相同的状态呈现 DOM,你将不得不使用本地存储或会话存储。在本例中,我将使用 sessionStorage 向您展示如何完成此操作。您可以在这里了解差异 -http://www.w3schools.com/html/html5_webstorage.asp http://www.w3schools.com/html/html5_webstorage.asp

工作示例

如何实现这一点的完整工作示例在这里 -http://codepen.io/nitishdhar/pen/DGHkw http://codepen.io/nitishdhar/pen/DGHkw

您可以切换到某个页面,然后刷新浏览器窗口,它将仅保留在该页面上。

详细说明

首先,你处理演出的方式可以这样改进——

您只需向所有希望触发页面更改事件的链接/按钮添加一个公共类,并在其中存储一个数据属性,定义单击时应打开的页面,如下所示 -

对于链接

<li><a href="#" class="show-page" data-page="one"> One</a></li>
<li><a href="#" class="show-page" data-page="two"> Two</a></li>
<li><a href="#" class="show-page" data-page="three"> Three</a></li>

请注意我添加的类和数据页属性。另外我给了 href 一个#,这样你就不必在点击事件上返回 false。您还可以使用 javascript:void(0);如果您不希望更新窗口哈希值,请使用 # 代替。

对于按钮也

<button type="button" class="btn btn-info show-page modal-btn" data-page="one" data-dismiss="modal" aria-hidden="true">One</button>
<button type="button" class="btn btn-info show-page modal-btn" data-page="two" data-dismiss="modal" aria-hidden="true">Two</button>
<button type="button" class="btn btn-info show-page modal-btn" data-page="three" data-dismiss="modal" aria-hidden="true">Three</button>

我还仅向在模态内部呈现的按钮添加了 modal-btn 类。这是为了仅处理模态中按钮的模态隐藏事件。没有必要将 modal('hide') 附加到其他链接。

现在在你的 javascript 中为了让它工作,你将做这样的事情 -

$('.show-page').click(function(){
   /* Get the Page to Show */
   var pageToShow = $(this).data('page');
   /* Hide all pages first */
    $('.page').addClass('hide');
   /* Show the page whose link was clicked */
    $('.' + pageToShow).removeClass('hide');
 });

$('.modal-btn').click(function() {
    $('.modal').modal('hide');
});

因此,我们尝试绑定具有类 show-page 的每个元素的单击事件。然后,单击时我们读取该特定单击元素的数据页属性中的内容。然后我们隐藏所有页面并仅显示其持有人被单击的页面。这样您就不必为所有按钮编写单独的事件处理程序。

我还单独处理模态的隐藏。

使用会话存储

现在,会话存储是浏览器存储,它将为您保存当前会话的一些数据,即直到用户关闭浏览器窗口。

我们将维护一个变量来保存用户之前访问的最后一个页面,如下所示 -

/* Check if session has some page to show stored */
if(typeof(Storage)!== "undefined" && sessionStorage.getItem('pageToShow')) {
    var pageToShow = sessionStorage.getItem('pageToShow');
    /* Hide all pages first */
     $('.page').addClass('hide');
    /* Show the page whose link was clicked */
     $('.' + pageToShow).removeClass('hide');
    /* Also set this page to session storage */
     sessionStorage.setItem('pageToShow', pageToShow);
}

现在,当用户尝试移动到页面时,在点击事件上,我们将不断更新会话变量“pageToShow”,如下所示 -

$('.show-page').click(function(){
    /* Get the Page to Show */
    var pageToShow = $(this).data('page');
    /* Hide all pages first */
     $('.page').addClass('hide');
    /* Show the page whose link was clicked */
     $('.' + pageToShow).removeClass('hide');
     if(typeof(Storage)!=="undefined") {
        sessionStorage.setItem('pageToShow', pageToShow);
    }
});

现在,如果用户也刷新页面,我们将首先检查会话中是否设置了 pageToShow,如果有,我们将移动到该页面,就像您想要的那样。

注意:如果您希望 pageToShow 变量在用户关闭并稍后重新打开浏览器后仍保留,则可以使用 localStorage 而不是 sessionStorage。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在页面刷新时保留 javascript/jquery 对 DOM 所做的更改 的相关文章

随机推荐

  • Rabbitmq消息到达时间戳

    有没有办法从消费者那里获取消息放入队列时的时间戳 不是当它发布的时候 而是当它真正进入队列的时候 不 没有办法解决这个问题 除非 正如您自己所说 您为此编写了一个插件 AMQP 中没有任何内容规格 http www amqp org sit
  • Android 应用程序干净的架构:数据层应该有自己的模型类吗?

    开发 Android 应用程序并尝试遵循干净的架构准则时 最好的方法是什么 但不是非常严格 因为这对于较小的项目可能有点过分 就我而言 我不确定哪种方法是最好的 如果有最好的方法 关于 数据层数据层是否应该在其自己的模型类上操作 或者是否可
  • 对 foreach 中的数组中的项目进行分组和求和

    我正在循环访问两个存储过程的结果集 根据另一个存储过程中的字段获取一个存储过程中的结果 包含结果集的两个数组是 customers and subcustomers foreach customers as customer foreach
  • 如何在MVC3中的Html beginform中发送javascript var

    我正在尝试使用 html beginform 将 JS 变量发送到控制器操作 例如 using Html BeginForm Index Contrl1 new SPName myJSVarcomeshere FormMethod Post
  • 即使与 libole32 链接,外部库中也未定义 OLE 引用

    使用 MINGW 我尝试将我的 C 代码与执行一些 OLE 操作的静态 C 库链接 mingw32 gcc main o resources o o mbcom exe L Lib Iup liup liupole lole32 lcomc
  • ggplot2:从包含geom_histogram的绘图对象读取最大条形高度

    像这样上一张海报 https stackoverflow com questions 7611691 relative positioning of geom text in ggplot2 我也在用geom text在 gglot2 中注
  • 远程 emacs 客户端连接,但不在终端中创建新框架

    我以 TCP 模式配置并启动了 emacs 服务器 Added setq server host 10 16 184 33 and setq server use tcp t 到 emacs ran emacs daemon 在同一主机上
  • 在 Django 模板中调用 Python 函数

    在 django 模板内 我尝试对其中一个模板变量调用 split 函数 然后获取最后一个元素 所以我做了如下操作 newsletter NewsletterPath split 1 不幸的是 它不喜欢分裂 有些人可能建议我在视图中进行拆分
  • 使用 NiFi 更新 CSV 内字段中的值

    我想实现一个简单的用例 使用 NiFi 将 CSV 内字段中的多个字符串 文本值更新为整数值 例如 我的 CSV 文件如下所示 输入 CSV 文件 字段 1 字段 2 美国 苹果 美国 苹果 印度 葡萄 中国城 奥兰治 澳大利亚民族 桃子
  • 如何让 QLabel 扩展到全宽?

    我想要一个QLabel无论内容如何 都扩展到容器的整个宽度 我想要这个 因为我动态设置文本并稍后添加小部件 这导致它切断部分文本 Widget Widget QWidget parent QWidget parent this gt set
  • 使用宏对数据集中的列按组求和

    我有一个数据集 如下所示 Month Cost Center Account Actual Annual Budget June 53410 Postage 13 234 June 53420 Postage 0 432 June 5343
  • javascript中div的随机位置

    我正在尝试使用 javascript 使 Div 随机出现在网页上的任何位置 因此 一个 div 出现然后消失 然后另一个 div 出现在页面上的其他位置然后消失 然后另一个 div 再次出现在页面上的另一个随机位置然后消失 依此类推 我不
  • 使用 csv 文件进行 Flyway 特定迁移

    我们正在使用 Flyway 通过 sql 脚本在我们的测试环境中保持最新的许多数据库 并且它工作得很好 但我们还特别需要使用 csv 文件更新数据库 我知道 Flyway 提供了一些基于 Java 的迁移来处理更复杂的更新 但问题是这些 J
  • 如何读取基于EMV的智能VISA卡详细信息

    我正在尝试从 VISA 卡读取信用卡数据 但无法成功 正如在互联网资源中我发现对于 MASTER 卡 我们可以使用 1PAY SYS DDF01 文件选择 PSE 目录 然后阅读记录 但对于 VISA 来说 它不是强制性的 当我使用 SEL
  • WeakReference 的 Java 文档中的矛盾

    这个问题是关于理解Java文档中WeakReference的问题 当我读到Java的WeakReference时 我在文档中看到了这样一句话 假设垃圾收集器在某个时刻确定 对象弱可达的时间 到时候就会 原子地清除对该对象的所有弱引用以及所有
  • Objective C 使用字符串动态调用方法

    我只是想知道是否有一种方法可以调用一个方法 我可以用字符串动态构建方法的名称 例如我有一个名为 loaddata 的方法 void loadData 我通常会这样称呼它 self loadData 但我希望能够使用字符串动态调用它 例如 N
  • AngularJS:为什么 ng-bind 在角度上比 {{}} 更好?

    我参加了一场有角度的演讲 其中提到了会议中的一位人士ng bind比 捆绑 原因之一 ng bind将变量放入监视列表中 只有当模型发生更改时 数据才会推送到视图 另一方面 每次都会对表达式进行插值 我猜是角度周期 并推送该值 无论该值是否
  • 枢轴标题样式

    C UWP Windows 10 项目 I need to set Pivot header style to something like this 我尝试使用这个例子堆栈溢出 https stackoverflow com questi
  • Bash 中的布尔运算符( &&、-a、||、-o )

    两者有什么区别 a and oUnix 运算符 这两种类型的使用有何限制 难道仅仅是因为 and 在条件中使用标志时应该使用运算符吗 As in 1 yes r 2 txt versus 1 yes a 2 lt 3 经验法则 Use a
  • 如何在页面刷新时保留 javascript/jquery 对 DOM 所做的更改

    我的问题是当我单击链接时 例如第二页 它将在屏幕上显示第二页 但是当我重新加载页面时 当前页面不会保存 并且会恢复为默认页面 如何防止所需页面刷新到默认页面 JavaScript