【发布时间】:2012-02-17 10:12:46
【问题描述】:
我正在构建一个自定义 Wordpress 主题,我希望它在更改页面时保留 DOM。它已经在工作了,但是我通过 Wordpress 提供内容的方式感觉非常难看。
我已选择用 javascript 替换所有指向哈希链接的链接,以实现优雅的回退:
此代码对菜单中的所有链接以及所有带有 ajax 类的链接执行此操作:
var baseLength = $footer.data('url').split('/').length;
$menu.find('a').add('.ajax').each(function(){
$(this).attr('href', function(){
var url = $(this).attr('href').split('/');
url[baseLength - 1] = '#' + url[baseLength - 1];
return url.join('/');
});
});
通过使用 baseLength,我确保在 wordpress 路径后添加 #(它可能位于 server.com 或 server.com/deep/path/to/wp)。
现在我将 ajax 调用绑定到 hashchange 事件(用于保留后退按钮等)
$(window).on('hashchange', function(){
//fade current page out
$boek.children().fadeOut(speed);
//get new page
$.get(location.href.replace(/#/,'') + '?ajax=true', function(data) {
$boek.html(data).children().hide().fadeIn(speed);
});
});
我现在向 URL 中的页面发出请求(在删除 # 以再次获得完整路径之后)。
丑陋的部分
我还将 get var 'ajax' 附加到 url,这样我就可以通过 Wordpress 仅提供主要内容:
在我的 header.php 中:
<?php if(!$_GET['ajax']) { ?>
<!doctype html>
...
<?php } ?>
(和页脚中的相同内容)。这样我只能得到除页眉/页脚/等之外的内容。将它构建到函数 imo 中会更干净。 Wordpress 是否可以做这样的事情?好像没找到。
我只对页面的 AJAX 内容感兴趣,我需要该内容,并且我还想要页面的标题(我现在没有)。
【问题讨论】:
-
你试过使用 $.load() 吗?有关详细信息,请参阅文档,但您可以执行 $.load('newpage#content') 之类的操作,它会加载内容但仅返回 id="content" 中的 html。