如何使用jQuery从URL获取锚点?


184

我有一个类似的网址:

www.example.com/task1/1.3.html#a_1

如何a_1使用jQuery 获取锚点值并将其存储为变量?

Answers:


206

您可以使用.indexOf().substring(),如下所示:

var url = "www.aaa.com/task1/1.3.html#a_1";
var hash = url.substring(url.indexOf("#")+1);

您可以在这里尝试一下,如果其中可能没有#,请执行以下if(url.indexOf("#") != -1)检查:

var url = "www.aaa.com/task1/1.3.html#a_1", idx = url.indexOf("#");
var hash = idx != -1 ? url.substring(idx+1) : "";

如果这是当前页面的URL,则可以使用window.location.hash它来获取它,并根据需要替换#


10
请注意:要从iFrame内部获取主窗口的哈希值,必须使用window.top.location.hash
Paolo Stefan 2013年

1
url.split("#").pop() -较慢但更容易。
Ifch0o1

489

对于当前窗口,您可以使用以下命令:

var hash = window.location.hash.substr(1);

要获取主窗口的哈希值,请使用以下命令:

var hash = window.top.location.hash.substr(1);

如果您的字符串带有URL /哈希,最简单的方法是:

var url = 'https://www.stackoverflow.com/questions/123/abc#10076097';
var hash = url.split('#').pop();

如果您使用的是jQuery,请使用以下代码:

var hash = $(location).attr('hash');

1
优雅的答案。在任何情况下这都不起作用?
sscirrus

2
快捷方式版本- var hash = window.location.hash.substr(1);由于JS同时具有substr / substring函数,它们是不同的,但在这种情况下是相同的。
亚瑟·库什曼

跟踪此变化的最佳方法是什么,即 有人点击了内页链接?
Rid Iculous

5
@RidIculous试试:$(window).on('hashchange',function(){$('h1')。text(location.hash.slice(1));});
西尔维奥·德尔加多

71

window.location.hash

检索除#外的所有内容


15
location.hash.slice(1)如果不想在最终字符串中使用井号,请记住使用!
桑迪·吉福德

39

jQuery样式:

$(location).attr('hash');

7
并非每个JavaScript问题都需要使用jquery来解决。
doxin

22
@doxin我同意,但问题是“如何使用jQuery从URL获取锚点?”
Valentin E

10

您可以使用以下“技巧”来解析任何有效的URL。它利用了锚元素的特殊href相关属性hash

使用jQuery

function getHashFromUrl(url){
    return $("<a />").attr("href", url)[0].hash.replace(/^#/, "");
}
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

用普通JS

function getHashFromUrl(url){
    var a = document.createElement("a");
    a.href = url;
    return a.hash.replace(/^#/, "");
};
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

3

如果您只有一个普通的url字符串(因此没有hash属性),则还可以使用正则表达式:

var url = "www.example.com/task1/1.3.html#a_1"  
var anchor = url.match(/#(.*)/)[1] 

1
在访问匹配的第二个元素之前需要检查匹配是否获得结果,否则,如果该URL没有锚点,则此代码将出错。
理查德·加赛德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.