我正在尝试通过将#更改为#!来使我的网站可以抓取。单击链接时页面工作正常,但我无法修复脚本直接从URL调用哈希。
这就是我所拥有的
HEAD
$(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()
});
BODY
< 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调用我的网站,它就不会加载内容。
任何人都可以指导我吗?
答案 0 :(得分: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部分周围插入单引号。
在一个相关的说明中,我建议如果你要做哈希爆炸(他们很头疼)你将href
属性作为你要去的实际URL值。在JavaScript中,切换到hash-bang。原因是禁用JavaScript的用户将无法使用您的网站。您的点击功能将稍微改变以设置哈希值,加载页面并禁用默认点击行为。
问题更新:在相关说明中,我的意思是href="#!foo"
将href更改为实际为href="foo.php"
。如果用户未启用JavaScript,则可以转到foo.php并查看该页面。如果用户确实有JavaScript将hashbang放在URL中并执行您之前执行的操作。你可以手动完成;但是,像jQuery BBQ这样的图书馆真的可以做到这一点。