Cof*_*ter 8 url jquery query-string
我有一个选择下拉列表,其id映射到值.在onChange事件上,我想重定向到同一个url但是在查询字符串后附加了'id = value'.
如何检查此'id'选项是否已存在于查询字符串中(我不想要多个值)并根据需要替换/追加.
我如何检查'?' 已经在查询字符串中并且如果不是则附加到url.
使用jquery有一个简单的方法吗?
它必须在引擎盖下做类似的事情$().ajax(url, {options}) .我希望我能做到$().redirect( url, { id : $(this).val() })或做某事.
提前致谢.
注意:此页面可能有或没有传入一些不同的查询选项(在其他表单选项上设置默认值),因此替换整个查询字符串不是一个选项.
<html>
<head><script type="text/javascript" src="/jquery-1.3.2.min.js"></script></head>
<body>
<script>
$(function(){
$('#selector').change(function(){
// problem if 'id' option already exists
var url = location.href + '?;id=' + $(this).val();
location.assign( url );
});
});
</script>
<a href="#" onclick="location.assign( location.pathname )">reset</a>
<form>
<select id='selector' name='id'>
<option value='1'>one</option>
<option value='2'>two</option>
<option value='3'>three</option>
</select>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Cof*_*ter 10
我最终使用RegExp匹配来覆盖选项.jQuery.param采用哈希并将其序列化为query_string,但它不提供反向(分解query_string).
// put function into jQuery namespace
jQuery.redirect = function(url, params) {
url = url || window.location.href || '';
url = url.match(/\?/) ? url : url + '?';
for ( var key in params ) {
var re = RegExp( ';?' + key + '=?[^&;]*', 'g' );
url = url.replace( re, '');
url += ';' + key + '=' + params[key];
}
// cleanup url
url = url.replace(/[;&]$/, '');
url = url.replace(/\?[;&]/, '?');
url = url.replace(/[;&]{2}/g, ';');
// $(location).attr('href', url);
window.location.replace( url );
};
Run Code Online (Sandbox Code Playgroud)
然后在HTML中
$('#selector').change(function(){
$.redirect( location.href, { id : $(this).val() })
})
Run Code Online (Sandbox Code Playgroud)
感谢所有回复的人.
根据CoffeeMonster的回答:
当location.href包含散列部分时会出现问题:
www.example.com#hash变为www.example.com#hash?id=whatever导致?id=whatever服务器不解释的部分.
通过删除网址的哈希部分来修复它: url.split("#")[0];
// put function into jQuery namespace
jQuery.redirect = function(url, params) {
url = url || window.location.href || '';
url = url.split("#")[0];
url = url.match(/\?/) ? url : url + '?';
for ( var key in params ) {
var re = RegExp( ';?' + key + '=?[^&;]*', 'g' );
url = url.replace( re, '');
url += ';' + key + '=' + params[key];
}
// cleanup url
url = url.replace(/[;&]$/, '');
url = url.replace(/\?[;&]/, '?');
url = url.replace(/[;&]{2}/g, ';');
// $(location).attr('href', url);
window.location.replace( url );
};
Run Code Online (Sandbox Code Playgroud)
现在www.example.com#hash变成了www.example.com?id=whatever
设置window.location.search将更新url的查询字符串(如果已经退出,则覆盖一个值)
$('#selector').change(function(){
window.location.search = "id=" + $(this).val();
});
Run Code Online (Sandbox Code Playgroud)