从花哨的jQuery URL中删除哈希

时间:2011-06-05 17:56:55

标签: javascript jquery html

我有一个用jQuery编写的Google Instant样式搜索脚本。当用户查询时,#search / SEARCHTERM / 1 /会添加到我的网页网址中。如何才能使我的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);
            }
        });
    });
});

3 个答案:

答案 0 :(得分:1)

您无法从哈希中删除哈希:)但您可以使用pushState()方法更改整个网址。

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

  

pushState()有三个参数:a   状态对象,标题(即   目前被忽略)和(可选)a   URL。

     

...

     

URL - 新历史记录条目的URL是   由此参数给出。请注意   浏览器不会尝试加载此URL   在调用pushState()之后,但是它   可能会稍后尝试加载URL,   例如,在用户重新启动之后   她的浏览器。新网址不需要   是绝对的;如果它是相对的,那就是   已解决相对于当前网址。

请注意,这在旧版浏览器中不起作用,您必须在使用JS生成的每个网址后面都有内容。

答案 1 :(得分:0)

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

你的意思是改变“window.location”吗?

答案 2 :(得分: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脚本,但从客户端的角度来看,URL将使用search/searchterm/1/样式。

正如Epeli所说,为了在没有哈希的情况下执行此操作并且不强制重新加载页面,您将需要使用history.pushState()来更改URL而不是更改window.location。

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