【问题标题】:what is the # symbol in the urlurl中的#符号是什么
【发布时间】:2013-12-02 19:03:07
【问题描述】:

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

的网址

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,因为整个页面似乎没有加载,但 url 已更改。

【问题讨论】:

    标签: html


    【解决方案1】:

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

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

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

    虽然过去这只是用于“锚点”,但现在它用于在许多 JavaScript 驱动的网站中存储可导航状态——例如,gmail 大量使用它。而且,就像这里的情况一样,有一些“照片共享”JavaScript 也使用片段标识符来进行状态/导航。

    因此,正如怀疑的那样,JavaScript“捕获”片段(有时称为“哈希”)变化并执行 AJAX(或其他后台任务)以更新页面。当片段更改时,页面本身不会重新加载,因为 URL 仍然引用 same 服务器资源(片段标识符之前的 URL 部分)。

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

    编码愉快。

    【讨论】:

    • @smith onhashchange -- 支持 onhashchange 的地方 ;-) 否则,请参阅“跨浏览器”实现的源代码,例如 jQuery hashchange plugin
    • @smith # 是片段标识符的第一个字符。 # 和之后的所有内容都是片段标识符的一部分。 Google 使用一种抓取方法利用#! 开头的某些片段——这是他们的惯例/方法(每个想要一个良好/正确索引的“交互式”网站的人都倾向于遵循它,谷歌是“大狗”。)请参阅查克答案中的链接。
    【解决方案2】:

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

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

    【讨论】:

    • 所以 #!和 # 是一样的吗?你能告诉我javascript是如何使用它的,就像他们为照片做的那样吗?谢谢!
    【解决方案3】:

    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

    【讨论】:

    • 你所说的“标签”正确地称为“片段”。
    • 那么如何使用javascript访问tp片段,你能给我举个例子吗,
    【解决方案4】:

    是一个锚地址的名称属性:http://www.w3schools.com/HTML/html_links.asp

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-20
        • 2010-10-09
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 2020-05-21
        • 2012-07-01
        相关资源
        最近更新 更多