0

我正在尝试通过将 # 更改为 #! 来使我的网站可抓取。单击链接时该页面工作正常,但我无法修复直接从 URL 调用哈希的脚本。

这就是我所拥有的

$(function() {
    $("#tabs a").click(function() {

        var page = this.hash.substr(2);

        $.get(page+".php", function(gotHtml) {
            $("#content").html(gotHtml)
        });
    });

    (location.hash) ? $("a[href="+location.hash+"]").click() : $("#tabs a:first").click()

});

身体

< ul id="tabs">

< li>< a href="#!foo" >foo</a>< /li>

< li>< a href="#!foo2" >foo2</a>< /li>

< li>< a href="#!foo3" >foo3</a>< /li>

< /ul>

当我点击 foo 时,内容加载正常,但如果我用 www.foo.com/#!foo 调用我的网站,它不会加载内容。

谁能指导我?

4

1 回答 1

0

如果您查看错误控制台,您会看到它引发了以下异常:

未捕获的错误:语法错误,无法识别的表达式:[href=#!foo2]

为了解决这个问题,你可以稍微改变你的 JavaScript。

$(function() {
    $("#tabs a").click(function() {

        var page = this.hash.substr(2);

        $.get(page+".php", function(gotHtml) {
            $("#content").html(gotHtml)
        });
    });

    (location.hash) ? $("a[href='"+location.hash+"']").click() : $("#tabs a:first").click()

});

请注意,我只是在选择器的 href 部分周围加上了单引号。

在相关的说明中,我建议如果您要进行 hash-bangs(它们令人头疼),则将href属性设置为您要访问的实际 URL 值。在 JavaScript 中切换到 hash-bang。原因是禁用 JavaScript 的用户将无法使用您的网站。您的点击功能会发生细微的变化,以设置散列、加载页面并禁用默认点击行为。

问题更新:在相关说明中,我的意思是如果将href="#!foo"href 更改为href="foo.php". 如果用户没有启用 JavaScript,他们可以转到 foo.php 并查看该页面。如果用户确实有 JavaScript,则将 hashbang 放在 URL 中并执行您之前所做的操作。您可以手动执行此操作;然而,像jQuery BBQ这样的库真的可以让这变得微不足道。

于 2012-04-27T14:12:08.933 回答