我想在当前页面的URL中获取哈希后的值,然后能够在新函数中应用它...例如。
网址可以是
www.example.com/index.html#foo
我想将此与下面的代码一起使用
$('ul#foo:first').show();
我有点假设/希望有一些方法可以抓住这个,并把它变成一个变量,然后我可以在第二段代码中使用它。
答案 0 :(得分:264)
编者注: 以下方法具有严重的安全隐患,并且根据您使用的jQuery版本,可能让您的用户暴露于XSS攻击。有关详细信息,请参阅此答案评论中对可能的攻击的讨论或this explanation on Security Stack Exchange。
您可以使用location.hash
属性来获取当前页面的哈希值:
var hash = window.location.hash;
$('ul'+hash+':first').show();
请注意,此属性在开头已包含#
符号。
实际上,由于您使用ID selector,因此不需要:first
伪选择器,因此假设DOM中的ID 唯一。
如果您想从URL字符串中获取哈希值,可以使用String.substring
方法:
var url = "http://example.com/file.htm#foo";
var hash = url.substring(url.indexOf('#')); // '#foo'
建议:请注意用户可以根据需要更改哈希,向您的选择器注入任何内容,您应该在使用之前检查哈希值。
答案 1 :(得分:35)
location.hash对IE不安全,对于IE(包括IE9),如果你的页面包含iframe,那么在iframe内部手动刷新后获取location.hash值是旧的(值)对于第一页加载)。手动检索的值与location.hash不同,所以总是通过document.URL
检索它var hash = document.URL.substr(document.URL.indexOf('#')+1)
答案 2 :(得分:2)
对于那些正在寻找纯JavaScript解决方案的人
document.getElementById(location.hash.substring(1)).style.display = 'block'
希望这可以节省你一些时间。
答案 3 :(得分:1)
答案 4 :(得分:1)
我正在使用它来解决@CMS答案中指出的安全隐患。
console.log('start');
// Putting this in a setTimeout so that "start" logs above
// before the below code starts blocking
setTimeout(() => {
const theProm = (async () => {
const t0 = performance.now();
while (performance.now() - t0 < 1000);
})();
theProm.then(() => {
console.log('done');
});
}, 100);
答案 5 :(得分:0)
如果当前页面有哈希值,我建议首先使用cek。否则它将是undefined
。
$(window).on('load', function(){
if( location.hash && location.hash.length ) {
var hash = decodeURIComponent(location.hash.substr(1));
$('ul'+hash+':first').show();;
}
});