-
-
Save balupton/858093 to your computer and use it in GitHub Desktop.
(function(window,undefined){ | |
// Prepare our Variables | |
var | |
document = window.document, | |
$ = window.jQuery; | |
// Wait for Document | |
$(window).bind(function(){ | |
// Prepare Variables | |
var | |
$content = $('#content'), | |
$body = $(document.body), | |
rootUrl = document.location.protocol+'//'+(document.location.hostname||document.location.host); | |
// Ajaxify our Internal Links | |
$.fn.ajaxify = function(){ | |
// Ajaxify internal links | |
$(this).find('a[href^="/"],a[href^="'+rootUrl+'"]').unbind('click').bind('click',function(event){ | |
var $this = $(this), url = $this.attr('href'), title = $this.attr('title')||null, relativeUrl = $(this).attr('href').replace(rootUrl,''); | |
document.location.hash = relativeUrl; | |
event.preventDefault(); | |
return false; | |
}); | |
// Chain | |
return this; | |
}; | |
// Ajaxify Page | |
$body.ajaxify(); | |
// Hook into State Changes | |
$(window).bind('hashchange',function(){ | |
// Prepare | |
var | |
relativeUrl = '/'+document.location.hash.replace(/^\//,''), | |
fullUrl = rootUrl+relativeUrl; | |
// Set Loading | |
$body.addClass('loading'); | |
// Start Fade Out | |
$content.fadeOut(800); | |
// Ajax Request the Traditional Page | |
$.get(url,function(data){ | |
// Find the content in the page's html, and apply it to our current page's content | |
$content.stop(true,true).show(); | |
$content.html($(data).find('#content')).ajaxify(); | |
if ( $content.ScrollTo||false ) $content.ScrollTo(); // http://balupton.com/projects/jquery-scrollto | |
$body.removeClass('loading'); | |
// Inform Google Analytics of the change | |
if ( typeof pageTracker !== 'undefined' ) { | |
pageTracker._trackPageview(relativeUrl); | |
} | |
}); // end get | |
}); // end onStateChange | |
}); // end onDomLoad | |
})(window); // end closure |
Great work Benjamin - its been incredibly useful.
In case its useful to someone else, 2 generic changes I had to make to the gist:
On line #38: should also strip out leading #
from the location.hash
as it's not passed to the server resulting in an incomplete url being sent
so
relativeUrl = '/'+document.location.hash.replace(/^\//,'')
becomes
relativeUrl = '/'+document.location.hash.replace(/^\//,'').replace(/^#/,'')
and a typo on line #48: the ajax request should be using fullUrl
instead of url
so it becomes
// Ajax Request the Traditional Page
$.get(fullUrl,function(data){
.....
You don't need to wrap this
with $ in jQuery plugins, this
is already the jQuery collection.
$(this).find('a[href^="/"]...
Can be
this.find('a[href^="/"]
well , i don't know why the $.fn.find
doesn't work for me . i use the jQuery JavaScript Library v1.6.1
$content.html($(data).find('#content')).ajaxify();
i try to use $.fn.filter()
and it works.hope to help someone...
$content.html($(data).filter('#content')).ajaxify();
how to use this plugin to browser back button.
http://stackoverflow.com/questions/19951004/solution-for-browser-back-button-tracking?noredirect=1#comment29700977_19951004
could please help me to solve this issue
In reference to: https://github.com/balupton/History.js/wiki/Intelligent-State-Handling