我正在查看一些以前的开发人员代码,我遇到了这一行:
location.href = '#' + variable;
具有更新location.hash
的效果。删除“#”,当然它会重定向到不存在的网址。玩了一下似乎我可以通过location.href
设置哈希,只要该值以'#'开头即可。这条线或类似的东西使用了很多,但我似乎找不到任何支持这种更新location.hash
行为的文档,方法是设置location.href
。
我希望看到一些显示这不仅仅是一个幸运的事故,这是有效的,所以我不必重新编码所有使用它的情况。你可以链接我的任何东西都会有所帮助。
最好只更改这些以正确设置location.hash
吗?
Thnks
答案 0 :(得分:2)
这是因为将location.href设置为 value 应该与单击href = value 的链接具有相同的行为;它不应该替换地址栏的内容,因为每次你想使用location.href
时你都必须建立绝对URL。
将值分配给location
和location.href
显然是在Javascript 1.0中,所以完全有可能在任何地方都没有正确指定 - Mozilla或Microsoft文档都没有详细说明。 HTML5 specifies the behaviour,很可能是追溯性的。
答案 1 :(得分:1)
这是一个开始您的位置属性之旅的好地方。
https://developer.mozilla.org/en/window.location
顺便说一句,#something
是一个有效的网址,并为window.location分配一个新的网址,导致浏览器导航到新目的地。
#something
被称为哈希并将浏览器指向当前文档上的锚点,如果锚点不存在则指向文档顶部。
答案 2 :(得分:0)
http://docstore.mik.ua/orelly/webprog/DHTML_javascript/0596004672_jvdhtmlckbk-chp-10-sect-2.html
所以当你将location.href设置为一个不被视为绝对路径的东西时会发生什么。浏览器会自动将当前网址放在您尝试设置的任何值之前。
所以“#section1”=“www.mysitethatistoocoolforschool.com#section1”
和“section1”=“www.mysitethatistoocoolforschool.comsection1”(这不存在)
答案 3 :(得分:0)
这个带有'#'
字符的网址称为基于锚点的网址,它们不应该将用户从网页重定向,而只是通过某种偏移更新网页的位置,与设置相同你引用的location.hash
。
正如Sii所说,这是有效的,因为当您更改location.href
值时,就像您点击链接一样,那么您有以下等价物:
<a href="#toc" >Go to Table of Contents</a>
与:
相同location.href = "#toc";
它们都会导致您的location.hash
变量的值为toc
。