我正在开发一个小项目,想要创建一个Ajax风格的网站。使用jQuery的
这个方法运行得很好,但问题是我的后退和前进按钮没有按照预期工作,我不知道自己做错了什么。URL和内容都正确地改变了,但标题却没有改变。这里的标题指的是浏览器窗口的标题(或选项卡)所显示的内容。也就是被加载页面的
我注意到当返回基本页面(即/sectionLoaderTest/)时,它会在一段时间内变成空白,只有一段时间后才会加载第一页的内容。有没有办法优化这个问题?
此外,我正在使用jQuery为被点击的链接添加一个active-class。如何确保这随着历史记录而相应更改?这样当用户导航回来时,正确的链接将被突出显示?
所以这三个问题是:
1.让标题在前进和后退时正常工作 2.优化主页面的加载时间 3.修复前进和后退时的active-class
欢迎任何帮助!
注1:我想建立在history.js和我的自己的脚本之上,并且因此保持对< HTML5浏览器的支持。我更喜欢这种方法,因为1.我知道这必须起作用,只是有些事情出了问题。2.如果我能看到别人的解决方案并在我已经编写的脚本中实现它,那么这将节省时间,而不是想出一个全新的脚本。
注2:只有回答我所有问题(3)的人才会得到赏金!
load()
加载内容。正如你们中的一些人所知道的那样,这种方法的缺点是URL不会根据显示的内容相应地改变。为了使其工作,可以使用pushState()
。但由于它不支持跨浏览器,我使用了插件history.js
。这个方法运行得很好,但问题是我的后退和前进按钮没有按照预期工作,我不知道自己做错了什么。URL和内容都正确地改变了,但标题却没有改变。这里的标题指的是浏览器窗口的标题(或选项卡)所显示的内容。也就是被加载页面的
<title>
标签或者链接的title属性(它们是相同的)。我认为这可能与我只调用需要的页面部分有关(通过在load()
中添加#content
)。但我仍然想要该页面的标题。以下是我到目前为止的测试案例。(自2013年12月28日起不再提供。)jQuery文件:$(document).ready(function () {
var firstLink = $("ul > li:first-child > a");
var menuLink = $("ul > li > a");
var firstLoadedHtml = firstLink.attr("href") + " #content";
$("#sectionContainer").hide().load(firstLoadedHtml).fadeIn("fast");
firstLink.addClass("active");
menuLink.click(function(e) {
history.pushState(null, null, this.href);
e.preventDefault();
e.stopImmediatePropagation();
var CurLink = $(this);
var newLoadedHtml = CurLink.attr("href") + " #content";
var oldSection = $(".contentPage");
$("#sectionContainer").hide().load(newLoadedHtml).fadeIn("fast");
menuLink.removeClass("active");
CurLink.addClass("active");
});
$(window).bind('popstate', function() {
var returnLocation = history.location || document.location;
$('#sectionContainer').load(returnLocation + "#content");
});
});
我注意到当返回基本页面(即/sectionLoaderTest/)时,它会在一段时间内变成空白,只有一段时间后才会加载第一页的内容。有没有办法优化这个问题?
此外,我正在使用jQuery为被点击的链接添加一个active-class。如何确保这随着历史记录而相应更改?这样当用户导航回来时,正确的链接将被突出显示?
所以这三个问题是:
1.让标题在前进和后退时正常工作 2.优化主页面的加载时间 3.修复前进和后退时的active-class
欢迎任何帮助!
注1:我想建立在history.js和我的自己的脚本之上,并且因此保持对< HTML5浏览器的支持。我更喜欢这种方法,因为1.我知道这必须起作用,只是有些事情出了问题。2.如果我能看到别人的解决方案并在我已经编写的脚本中实现它,那么这将节省时间,而不是想出一个全新的脚本。
注2:只有回答我所有问题(3)的人才会得到赏金!