url中的#符号是什么

时间:2011-10-26 23:06:54

标签: html

我去了一些照片分享网站,所以当我点击照片时,它会引导我到一个网址

www.example.com/photoshare.php?photoid=1234445

。当我点击此页面中的另一张照片时,网址就会变为

www.example.com/photoshare.php?photoid=1234445#3338901

如果我点击同一页面中的其他照片,则#后面的唯一数字会发生变化。和漂亮的照片一样

www.example.com/photoshare.php?album=holiday#!prettyPhoto[gallery2]/2/

。我假设他们使用了ajax,因为整个页面似乎没有加载,但是网址被更改了。

5 个答案:

答案 0 :(得分:11)

#后面的网址(包括和)部分是fragment identifier。它的其余部分是特殊的。要记住的关键是“仅客户端”(当然,客户端可以选择将其发送到服务器......而不是作为片段标识符):

  

片段标识符的功能与URI的其余部分不同:即,其处理完全是客户端的,没有服务器的参与 - 当然,服务器通常有助于确定MIME类型,并且MIME类型确定片段的处理。当代理(例如Web浏览器)从Web服务器请求资源时,代理会将URI发送到服务器,但不会发送该片段。而是代理等待服务器发送资源,然后代理根据文档类型和片段值处理资源。

这可用于导航到“锚点”链接,例如:http://en.wikipedia.org/wiki/Fragment_identifier#Basics(请注意它是如何进入“基础”部分)。

虽然过去常常只使用“锚点”,但它现在用于在许多基于JavaScript的站点中存储可导航状态 - 例如,gmail大量使用它。并且,就像这里的情况一样,有一些“photoshare”JavaScript也使用片段标识符进行状态/导航。

因此,如所怀疑的,JavaScript“捕获”片段(有时称为“散列”)更改并执行AJAX(或其他后台任务)来更新页面。片段更改时页面本身不会重新加载,因为URL仍然引用相同的服务器资源(片段标识符之前的URL部分)。

较新的浏览器支持onhashchange事件,但长期以来,各种轮询技术都支持监控。

快乐的编码。

答案 1 :(得分:4)

它被称为片段标识符。它标识页面的“部分”。如果存在nameid属性等于片段文本的元素,则会导致页面滚动到该元素。它们也被丰富的JavaScript应用程序用于引用应用程序的不同部分,即使所有功能都位于单个HTML页面上。

最近,您经常会看到以“#!”开头的片段。虽然这些技术上只是以字符开头的片段,但该格式为specified by Google以帮助使这些AJAXy伪页面可以抓取。

答案 2 :(得分:1)

这是锚点网址的名称属性:http://www.w3schools.com/HTML/html_links.asp

用于在HTML页面中创建书签(不要与工具栏中的书签混淆等)。

在您的示例中,如果您使用URL中的#符号为页面添加了书签,当您再次访问该书签时,它将显示您查看的最后一张图片,很可能是ID为3338901的图片。

答案 3 :(得分:1)

url(和其他东西)上下文中的'#'符号称为散列,散列后称为片段。使用JavaScript,您可以访问片段并使用其内容。

例如,大多数浏览器都会实现onhashchange事件,当哈希值发生变化时会触发该事件。使用JavaScript,您还可以从location.hash访问哈希。例如,使用类似http://something.com#somethingelse

的网址
var frag = location.hash.substr(1);
console.log(frag);

这会在控制台上打印'somethingelse'。如果我们没有使用substr删除第一个字符,则frag将为:'#somethingelse'。

此外,当您导航到带有主题标签的URL时,浏览器将尝试向下滚动到与该片段对应的id的元素。

http://en.wikipedia.org/wiki/Fragment_identifier

答案 4 :(得分:0)

嘿,我用这样的东西......简单但有用

       location.href = data.url.replace(/%2523/, '%23');

其中data.url是我的原始网址。它替换了我的网址中的#