I'd like to get the value after a hash in the URL of the current page and then be able to apply this in a new function... eg.
The URL could be
www.example.com/index.html#foo
And I would like to use this in conjunction with the following piece of code
$('ul#foo:first').show();
I'm kinda assuming/hoping there is some way of grabbing this, and turning it into a variable that I can then use in the second piece of code.
This question is related to
jquery
url
hash
fragment-identifier
location.hash is not safe for IE , in case of IE ( including IE9 ) , if your page contains iframe , then after manual refresh inside iframe content get location.hash value is old( value for first page load ). while manual retrieved value is different than location.hash so always retrieve it through document.URL
var hash = document.URL.substr(document.URL.indexOf('#')+1)
For those who are looking for pure javascript solution
document.getElementById(location.hash.substring(1)).style.display = 'block'
Hope this saves you some time.
I would suggest better cek first if the current page has a hash. Otherwise it will be undefined
.
$(window).on('load', function(){
if( location.hash && location.hash.length ) {
var hash = decodeURIComponent(location.hash.substr(1));
$('ul'+hash+':first').show();;
}
});
Since jQuery 1.9, the :target
selector will match the URL hash. So you could do:
$(":target").show(); // or $("ul:target").show();
Which would select the element with the ID matching the hash and show it.
I'm using this to address the security implications noted in @CMS's answer.
// example 1: www.example.com/index.html#foo
// load correct subpage from URL hash if it exists
$(window).on('load', function () {
var hash = window.location.hash;
if (hash) {
hash = hash.replace('#',''); // strip the # at the beginning of the string
hash = hash.replace(/([^a-z0-9]+)/gi, '-'); // strip all non-alphanumeric characters
hash = '#' + hash; // hash now equals #foo with example 1
// do stuff with hash
$( 'ul' + hash + ':first' ).show();
// etc...
}
});
Source: Stackoverflow.com