2011-06-05 39 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代碼中,我可以稍後進行更新。