willdanceforfun
willdanceforfun

Reputation: 11250

How to get the text after the # symbol in a link?

I have a simple link with a hashtag in it. ie:

<a class="page_navigation" href="#something">click</a>

On clicking this, I would like to just end up with the 'something' part (minus the hash) in a var.

So far I have

$('.page_navigation').click(function(e)
{
    e.preventDefault();
    var href = $(this).attr('href');
});

Obviously I just end up with '#something' in my href var with the above code, and I understand I could do some kind of regex (not sure how yet) to strip the #, but I wonder if there is an easier way to access this part of the href I'm unaware of, without having to go through some find and replace code.

Any ideas?

Note: I also know I could store the 'something' in a data tag, but I'm trying to keep this code as DRY as possible.

Upvotes: 0

Views: 1317

Answers (4)

Ayush
Ayush

Reputation: 42450

You don't need regular expressions for this. You can simply do

var fragment;

if (window.location.hash) {
    fragment = window.location.hash;
}

Note that this will pick up the # symbol as well. So,

fragment = "#something"

If you don't want the # symbol, use substring like this:

fragment = window.location.hash.substring(1)

If you want to pick out the hash fragment from an anchor tag, you can do this:

var link = $('#yourAnchor').attr('href');
var fragment;
if (link.indexOf("#") !== -1) {
    fragment = link.substr(link.indexOf("#") + 1);
}

Upvotes: 0

jfriend00
jfriend00

Reputation: 707996

If you know it has a # in it, you can use this:

$('.page_navigation').click(function(e)
{
    e.preventDefault();
    var hash = this.href.replace(/^.*#/, "");
});

If you don't know whether it has one it it or not, you can use this:

$('.page_navigation').click(function(e)
{
    e.preventDefault();
    var hash = "";
    if (this.href.indexOf("#") {
        hash = this.href.replace(/^.*#/, "");
    }
});

In HTML5, you could use:

this.hash

but that is only for the latest browsers.

Upvotes: 2

Tats_innit
Tats_innit

Reputation: 34117

Demo http://jsfiddle.net/UR3XN/

code

$('.page_navigation').click(function(e)
{
    e.preventDefault();
    var href = $(this).attr('href');
    var equalPosition = href.indexOf('#'); //Get the position of '#'
    var withouthash = href.substring(equalPosition + 1); 
    alert(withouthash);
});​

Upvotes: 0

epascarello
epascarello

Reputation: 207537

var theHash = $(this).prop("hash").substr(1);

Related answer to another question

Upvotes: 1

Related Questions