我有一个选择下拉列表,其中 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>
最佳答案
我最终使用正则表达式匹配来覆盖选项。 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 );
};
然后在html中
$('#selector').change(function(){
$.redirect( location.href, { id : $(this).val() })
})
感谢所有回复的人。
关于jquery - 如何使用 jquery 操作查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053157/