我正在wordpress单页网站上用ajax加载内容。我试图在每次加载ajax帖子时更改url。
这是我用来在单击项目时修改哈希的代码。加载函数正在运行,因此我不会为了清晰起见将其添加到下面的代码中(它只需要点击li的href并将内容加载到div中)。
$(document).ready(function() {
$.ajaxSetup({cache: false});
$('#portfolio-list li:not(#DrawerContainer)').click(function() {
window.location.hash = "#!" + this.pathname;
alert(window.location.hash);
//And here comes the loading part
return false;
});
return false;
});
不幸的是,添加到我的网址的唯一内容是#!undefined
。警告window.location.hash
或this.pathname
会给我相同的结果。
我需要在地址栏中将路径名作为哈希返回?
答案 0 :(得分:0)
根据你的结构,这应该是你友好的哈希:
var pathname = $(this).find('a')[0].href.split('/'),
l = pathname.length;
pathname = pathname[l-1] || pathname[l-2];
window.location.hash = "#!" + pathname;
<小时/>
现在要使URL可共享,您需要对DOM准备好哈希检查并加载相应的内容。
如果所有页面都在同一目录中,您可以直接进行:
$(function() {
var hash = window.location.hash;
//checks if hash exists and is hash bang
if (hash && hash.substring(0, 2) === '#!') {
hash = hash.substring(2); //removes leading #!
$('#content').load('path/to/' + hash);
}
});
如果页面不在同一目录中,则需要将哈希值映射到地址。
$(function() {
var hashmap = {
'test5': 'http://foobar.baz/fooz/test5',
'anotherTest': 'http://foobar.baz/barz/anotherTest',
};
var hash = window.location.hash;
//checks if hash exists and is hash bang
if (hash && hash.substring(0, 2) === '#!') {
hash = hash.substring(2); //removes leading #!
if (hashmap[hash]) { //checks if hash exist in the hash map
$('#content').load(hashmap[hash]);
}
}
});
我在上面的演示中使用警报,因为加载会失败。当然,您必须通过首选加载方法来调整/替换$('#content').load
。