2011-06-05 41 views
1

我有一个用jQuery编写的Google即时样式搜索脚本。当用户查询时,#search/SEARCHTERM/1 /被添加到我的页面URL中。我怎样才能让我的网址在开始时没有#号?从花哨的jQuery URL中删除哈希

这里是我当前的jQuery代码:

$(document).ready(function(){ 
    $("#search").keyup(function(){ 
     var search=$(this).val(); 
     var query=encodeURIComponent(search); 
     var yt_url='search.php?q='+query+'&category=web'; 
     window.location.hash='search/'+query+'/1/'; 
     document.title=$(this).val()+" - My Search Script"; 
     if(search==''){ 
      window.location.hash=''; 
      document.title='My Search Script'; 
     } 
     $.ajax({ 
      type:"GET", 
      url:yt_url, 
      dataType:"html", 
      success:function(response){ 
       $("#result").html(response); 
      } 
     }); 
    }); 
}); 
+0

你有没有你想要的网址的例子?关键是改变'window.location.hash ='search /'+ query +'/ 1 /'这一行;'' – 2011-06-05 18:05:28

回答

1

您无法从哈希删除哈希:),但你可以改变整个URL随着pushState的()方法。

https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState().c2.a0method

pushState的()有三个参数:一个 状态对象,一个标题(这是目前 忽略),和(任选地)一个 URL。

...

网址 - 新的历史条目的URL是这个参数给出 。请注意,在对pushState()的调用后, 浏览器不会尝试加载此URL ,但 可能会在用户重新启动 浏览器后尝试加载URL以后,例如 。新网址不需要 是绝对的;如果它是相对的,则相对于当前URL解析为 。

请注意,这不适用于较旧的浏览器,并且您必须在使用JS生成的每个网址后都有内容。

0

您正在更改“window.location.hash”。这将是很难从哈希中删除散列:)

你是否想要改变“window.location”?

0

要做到这一点没有URL哈希或查询字符串,你可能需要在后端做一些URL重写。

你可以使用.htaccess文件看起来像这样做:

DirectoryIndex search.php  
RewriteEngine on 

# If the requested file or directory does not exist 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# silently redirect to the search page 
RewriteRule ^search/(.*)$ search.php?q=$1 [L,QSA] 

jQuery的代码仍然需要使用搜索字符串来查询PHP脚本,但是从该客户的点网址会使用search/searchterm/1/风格。

正如Epeli指出的,要做到这一点没有哈希,也不要强制不断重新加载页面,您将需要使用history.pushState()来更改URL而不是更改window.location。

如果您需要一些帮助将pushState()整合到您的jQuery代码中,我可以稍后进行更新。