如何在链接中的#符号后面找到文本?

时间:2012-05-24 01:34:33

标签: javascript jquery

我有一个带有主题标签的简单链接。即:

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

点击这个,我想最后得到var中的'something'部分(减去哈希)。

到目前为止我已经

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

显然,我只是在我的href var中使用上面的代码结束了'#something',我知道我可以做一些正则表达式(不确定如何)去掉#,但是我想知道是否有更容易访问我不知道的href的这一部分,而无需经过一些查找和替换代码。

有什么想法吗?

注意:我也知道我可以将'某些东西'存储在数据标记中,但我正在尝试将此代码保留为DRY。

4 个答案:

答案 0 :(得分:2)

如果你知道它中有#,你可以使用它:

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

如果你不知道它是否有,你可以使用它:

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

HTML5中,您可以使用:

this.hash

但这仅适用于最新的浏览器。

答案 1 :(得分:1)

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

Related answer另一个问题

答案 2 :(得分:0)

您不需要正则表达式。你可以简单地做

var fragment;

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

请注意,这也会选择#符号。所以,

fragment = "#something"

如果您不想要#符号,请使用substring,如下所示:

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

如果要从锚标记中挑选哈希片段,可以执行以下操作:

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

答案 3 :(得分:0)

演示 http://jsfiddle.net/UR3XN/

<强>码

$('.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);
});​