正在从花哨的jQuery URL中删除哈希
Removing hash from fancy jQuery URL
我有一个用jQuery编写的Google Instant风格的搜索脚本。当用户查询时,#search/SEARCHTRM/1/会添加到我的页面URL中。如何使我的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);
}
});
});
});
您不能从hash中删除hash:),但您可以使用pushState()方法更改整个url。
https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState().c2.a0方法
pushState()接受三个参数:state对象,标题(当前已忽略),以及(可选)URL。
URL--新历史记录条目的URL为由该参数给定。请注意浏览器不会尝试加载此URL在调用pushState()之后可能稍后尝试加载URL,例如,在用户重新启动之后她的浏览器。新URL不需要绝对;如果是相对的,那就是已相对于当前URL解析。
请注意,这在旧的浏览器中不起作用,并且您必须在使用JS生成的每个url后面都有内容。
您正在更改"window.location.hash"。很难从哈希中删除哈希:)
你是想改变"窗口位置"吗?
要在没有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代码中的帮助,我可以稍后更新。
- 使用php或javascript从facebook相册URL中删除多余的部分
- 如何删除在PHP中打印网页时显示的URL
- Javascript匹配以从URL中删除部分文件名-替换最后一次出现的内容
- 使用jQuery删除部分URL
- tinyMCE删除背景图像:“"类似于magento的url的内容
- 谷歌应用脚本中的 UrlFetchApp.fetch 删除 url 参数
- JavaScript删除URL数组中字符之前的所有内容
- 通过regex删除部分url
- 在AngularJs的SPA中,我如何删除“;.html”;来自我的URL
- 通过javascript从浏览器历史记录中删除URL
- history.pushState正在删除部分url
- 如何使用jquery或javascript从url中删除带有页码的尾部斜杠
- Laravel 5和AngularJS删除'#'来自url
- "/"当onclick事件时从URL中删除
- 使用Javascript从url中删除参数
- 从url中删除一个空查询字符串
- 使用jquery从URL中删除查询字符串(处理问题)
- 删除在单击其他选项卡时生成的url查询元素的一部分
- 使用jquery根据URL删除特定元素
- AngularJS路由url删除这个&;#!&;