这是使用 History.js 的正确方法吗?

2023-11-22

我能够使用三个链接来组合一个简化的完整 History.js 示例,从整个页面加载内容片段,而无需更新页面,同时更新浏览器历史记录。

这是相关的代码片段 - 完整的工作示例在这里http://jsfiddle.net/PT7qx/show

<a href="/page-header">Page Header</a>
<a href="/login-form">Login Form</a>
<a href="/nothing">Nothing</a>

<script>
var History = window.History;
if (!History.enabled) {
    return false;
}

History.Adapter.bind(window, 'statechange', function() {
    var State = History.getState();
    History.log(State.data, State.title, State.url);

    if (State.title == 'Page Header') {
        $('#content').load('/user/login/ .pageHeader > *');
    }

    if (State.title == 'Login Form') {
        $('#content').load('/user/login/ #common-form > *');
    }

    if (State.title == 'Nothing') {
        $('#content').empty()
    }
});

$('body').on('click', 'a', function(e) {

    var urlPath = $(this).attr('href');
    var Title = $(this).text();
    History.pushState(null, Title, urlPath);

    // prevents default click action of <a ...>
    return false;
});
<\script>

我想知道这是否是正确的用法。以前的版本能够使用 # url 绑定到事件。我还没有看到任何将事件绑定到最新版本的 url 的示例,因此我使用 .on() 单击事件来调用历史记录并找出在那里单击的链接。

我不确定这是否是完成此示例的最佳方法。


经过更多研究后,我想出了一个简单但完整的示例来说明如何使用最新的 History.js。这是工作 jsfiddle 示例Ajax 负载托管在 Github 上的 HTML 片段

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Simple History.js Ajax example by dansalmo</title>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
    <script type="text/javascript" src="http://balupton.github.com/history.js/scripts/bundled/html4+html5/jquery.history.js"></script>

    <style type='text/css'>
      .hidden {
        display: none;
        visibility: hidden;
      }
    </style>
  </head>
  <body>
    <a href="/home">Home</a>
    <a href="/about">About</a>
    <a href="/contact">Contact</a>
    <a href="/other">Other</a>

    <p>The whole page will not re-load when the content below is updated, yet the URL is clean and the back button works!<p><br />
    <div id="content">
      <div id="home">Home Page content</div>
    </div>
    <br />
    <p>The content div will be updated with a selected div fragment from an HTML file hosted on github, however the broswer will see each content update request as a part of the page history so that the back button can be used.</p>
    <br  />
    <p>Adding more menu items is as simple as adding the new links and their corresponding html fragments.<p>
    <div id="hidden_content" class="hidden"></div>
  </body>
    <script type='text/javascript'>//<![CDATA[ 
  $(function(){
  var History = window.History;
  if (History.enabled) {
      State = History.getState();
      // set initial state to first page that was loaded
      History.pushState({urlPath: window.location.pathname}, $("title").text(), State.urlPath);
  } else {
      return false;
  }

  var loadAjaxContent = function(target, urlBase, selector) {
      $(target).load(urlBase + ' ' + selector);
  };

  var updateContent = function(State) {
      var selector = '#' + State.data.urlPath.substring(1);
    if ($(selector).length) { //content is already in #hidden_content
        $('#content').children().appendTo('#hidden_content');
        $(selector).appendTo('#content');
    } else { 
        $('#content').children().clone().appendTo('#hidden_content');
        loadAjaxContent('#content', State.url, selector);
    }
  };

  // Content update and back/forward button handler
  History.Adapter.bind(window, 'statechange', function() {
      updateContent(History.getState());
  });

  // navigation link handler
  $('body').on('click', 'a', function(e) {
      var urlPath = $(this).attr('href');
      var title = $(this).text();
      History.pushState({urlPath: urlPath}, title, urlPath);
      return false; // prevents default click action of <a ...>
  });
  });//]]>  

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

这是使用 History.js 的正确方法吗? 的相关文章

  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 如果选中复选框则显示 div

    我正在尝试构建类似 WordPress 选项的东西 用于在创建文章时切换字段可见性 我所构建的依赖于 click函数使用相应的字段名称切换父项 我想知道如果选中该复选框 执行此操作的最佳方法是什么 因为如果您选中一个框并重新加载页面 因为它
  • 意外的令牌:尝试解析 JSON 字符串时

    我正在尝试解析这个 JSON 字符串 RESULTS name Thessaloniki GR type Sailing l sailing weather beach Porto 20Carras 20Marina 45904 name
  • JQuery UI:将长元素放在光标位置而不是元素的中间

    我有一些很长的可拖动元素 可以将它们放入背景表的所有单元格中 当我开始拖动此类元素并将其悬停在可放置容器 表格的单元格 上时 了解元素将被放置到何处的 热点 点是其自身的中间 不幸的是 我的元素的中间通常不可见 并且将元素放在正确的位置是没
  • 将列名称与具有 AJAX 数据源的 DataTable 一起使用

    我正在尝试升级我的系统以使用 DataTables 1 10 而不是 1 9 并且我正在尝试找到一种使用 JSON 对象而不是列表传回行内容的方法 具体来说 而不是以格式传回数据 data data data data data data
  • ASP.Net MVC AJAX 链接不起作用

    为了实现 AJAX 登录 我在我的页面上有这个链接 附近有一个 id 为 lll 的 div 当我单击该链接时 我得到了无聊的确认 只是出于调试目的而添加 没有它的行为是相同的 但然后什么也没有发生 没有请求到达服务器 因为我在 LogOn
  • 具有 yaxis max 属性的 Highcharts 不会隐藏绘图带和标签

    我创建了两个 jsfiddle 来演示我的问题 第一个 jsfiddle 是我需要的 第二个 jsfiddle 是我遇到的问题 这个jsfiddle https jsfiddle net n5ua6krj 1 https jsfiddle
  • 使用 fancybox 显示内容,就像 Javascript 警报一样

    我尝试在 fancybox 中显示 PHP 文件的内容 但我无法处理它 现在是这样的情况 如果出现文件权限问题 div 网站上显示 我想要的内容来自 div 在花式盒子里 我尝试的所有操作都会收到通知 无法加载请求的内容 请稍后再试 这意味
  • 使用 setAttribute() 添加“onclick”函数

    为什么以下不起作用 显然该功能尚未添加 function activatetypeinput event devtype The function is called but it doesn t set the attribute var
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • 如何向 jquery-file-upload basic-plugin 添加取消上传按钮

    我正在使用 jquery file upload 和 Rails 4 我从https github com tors jquery fileupload rails paperclip example https github com to
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • jQuery 从选择选项切换 div

    我需要从下拉选择选项框中切换 div 我想要它类似于汇编选择 http www ryancramer com projects asmselect examples example1 html对于 jquery 但我不想列出选项标签 而是希
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • Jquery 在 DIV 中进行多重加载

    这是我的代码 right load textes html nicolas right load textes html antoine 问题是内容divantoine覆盖了右边div nicolas加载的内容div div right l
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • 如何限制下拉列表更改而不禁用它

    如何在不禁用下拉列表的情况下限制下拉列表选项更改 意味着我无法更改选项 并且下拉列表不应该是只读的 我的问题是我的服务器没有读取禁用的元素 这是我的出价 http jsfiddle net m3v7y jQuery var lastSel
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie

随机推荐

  • 使用 html 按钮更改网站语言

    在 PHP 中 我想在单击按钮时更改网站的语言 英语 德语等 这是解决该问题的正确方法吗 a href index php img src images language languageNO png a a href index php
  • 对方法返回值使用 C# 丢弃运算符是否有意义?

    Visual Studio 2019 的代码分析和代码建议开始突出显示我调用返回值但根本不使用该值的方法的每一行代码 并告诉我使用丢弃运算符 我不完全理解为什么这很重要 甚至对于 Fluent API 风格的代码来说它似乎是错误的 以下两行
  • Autofac - 生命周期和模块

    问题 摘要 给定一个注册依赖项 X 的模块 依赖项 X 在 MVC3 应用程序中具有不同的生命周期 每个 HttpRequest 的生命周期 然后在控制台应用程序中 每个具有名称的生命周期范围的依赖项 在哪里或如何指定依赖项 X 的生命周期
  • 使用 XSD 正确验证 XML 文档

    作为一名具有丰富 XML 使用和生成经验的开发人员 我以前从未真正与模式进行过交互 这对我来说是第一次真正发生 我遇到过一个 功能 我认为它更像是一个有详细记录的错误 使用 XDocument Validate 时 似乎在某些情况下 如果文
  • OnApplicationFocus() 和 OnApplicationPause() 有什么区别?

    说到移动设备 这两种方法有什么区别 如果我按主页键 两者都会被调用 有没有一种情况 一个被调用 另一个不被调用 由于这个 UnityAnswer 是第一个 如果不是第一个 在搜索 OnApplicationFocus Pause 和 iOS
  • 谷歌 aspnet mvc5 上的 AuthenticationManager.GetExternalLoginInfoAsync() 返回 null [重复]

    这个问题在这里已经有答案了 我使用默认的 Visual Studio 2015 模板和 Google 身份验证开发了 ASPNET MVC 5 应用程序 在开发环境中一切正常 但在外部身份验证后的实际调用中AuthenticationMan
  • Python 2.6 通过队列/管道/等发送连接对象

    Given 这个错误 Python 问题 4892 这会导致以下错误 gt gt gt import multiprocessing gt gt gt multiprocessing allow connection pickling gt
  • 多个参数与选项对象

    当创建具有多个参数的 JavaScript 函数时 我总是面临这样的选择 传递参数列表还是传递选项对象 例如 我正在编写一个函数来将 nodeList 映射到数组 function map nodeList callback thisObj
  • 如何替换除第一个之外的所有出现的情况?

    如何替换字符串中除第一个单词之外的所有重复单词 就是这些字符串 s cat WORD dog WORD mouse WORD s1 cat1 WORD dog1 WORD 将被替换为 s cat WORD dog REPLACED mous
  • IE7 iframe 空白页

    我正在处理一个有 iframe 的网页 并且我正在 iframe 中加载外部网站 该页面在 IE6 FF 等中工作正常 但在 IE7 中我看到的只是一个空白页面 我发现这是由于IE7中的网络钓鱼过滤器造成的 网络钓鱼过滤器将无法检查 ifr
  • 非常有用的VB6源代码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 这不是一个问题 但我想我应该启动一个线程 其中可以放置指向特别有用 且广泛适用 的 vb6 代码的链接 我的选择是由一个名叫 John Korejw
  • 使用 tsconfig.json 忽略 *.js 和 *.jsx 文件

    这是我们尝试过的 compilerOptions target esnext moduleResolution node allowJs true jsx react include src exclude src js src jsx 当
  • 找到加载特定类的ClassLoader

    有没有办法确定哪个类加载器加载特定的类 或者更具体地说 从加载特定类的位置 我遇到了加载旧数据库驱动程序类的情况 我想找到加载旧驱动程序的文件 我最初的方法是在 ClassLoader loadClass 方法上设置一个调试点 并在类加载后
  • 在 Spring Security 中根据某种所有权设置用户角色

    在我基于 Spring 的应用程序中 我目前拥有 ADMIN 和 USER 等基本角色 是否可以定义一个用户角色 例如 PHOTO UPLOADER 它继承自 USER 但还添加了检查发出调用的用户是否实际上是照片的所有者 我厌倦了写同样的
  • 如何实现.NET MAUI本地化

    我无法找到任何有关为 MAUI 应用程序实施本地化的指导 我已经阅读了一些有关本地化 Xamarin 应用程序的信息 但即使经过广泛的网络搜索 也无法将其转发到 MAUI 谁能给我指出我可能错过的参考资料 试试这个 创建标准资源 添加新项目
  • 检测 GitHub 提交的 IP 地址

    我是一些公司 github 存储库的所有者 最近 我们一直怀疑一名开发人员可能通过借用的 github 身份寻求外包帮助 许多凌晨 4 点批量提交 github com 上有没有办法确定提交者的源 IP 地址 在流量页面上 我可以根据独特克
  • 如何修复 EF Core 迁移“证书链由不受信任的机构颁发”

    连接字符串 Data Source
  • 如何最好地告诉 CMake 在哪里可以找到 dll

    我有一个简单的项目结构 源自令人惊叹的教程 https rix0r nl blog 2015 08 13 cmake guide 它看起来如下 src CMakeLists txt mylib include mylib mylibclas
  • 从 Android 应用程序打开本机浏览器

    我有一部安装了多个浏览器的 Android 手机 我可能会或可能不会将浏览器设置为默认值 所以 我的问题是 从我的应用程序中 如何仅在NATIVE安卓浏览器 有没有办法知道是否有浏览器设置为默认浏览器 从我的应用程序中 如何仅在 NATIV
  • 这是使用 History.js 的正确方法吗?

    我能够使用三个链接来组合一个简化的完整 History js 示例 从整个页面加载内容片段 而无需更新页面 同时更新浏览器历史记录 这是相关的代码片段 完整的工作示例在这里http jsfiddle net PT7qx show a hre