0

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

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

单击此按钮后,我只想在 var 中得到“某物”部分(减去哈希)。

到目前为止我有

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

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

有任何想法吗?

注意:我也知道我可以将“某物”存储在数据标签中,但我正试图让这段代码尽可能干燥。

4

4 回答 4

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

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

于 2012-05-24T01:36:12.530 回答
1
var theHash = $(this).prop("hash").substr(1);

另一个问题的相关回答

于 2012-05-24T01:40:30.640 回答
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);
}
于 2012-05-24T01:37:46.430 回答
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);
});​
于 2012-05-24T01:41:11.277 回答