jquery - 如何使用 jquery 操作查询字符串

标签 jquery url 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>

最佳答案

我最终使用正则表达式匹配来覆盖选项。 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/

相关文章:

jquery - 向特定图像添加类

http - URL 路径中的资源是否有自己的 IP 地址?

php - $_SERVER ['HTTP_REFERER' ] 与 Request.ServerVariables ("HTTP_REFERER")

php - 不确定 URL 是如何在 php 网站中构建的

javascript - 需要根据从 jsp 中的 Controller 传递的变量来选中/取消选中页面加载时的复选框

javascript - 显示/隐藏文本时如何平滑过渡

javascript - 如何在for循环中添加jQuery显示/隐藏功能?

c - 如何在 C 中比较一个字符串的最后 n 个字符与另一个字符串

asp.net - 从一个浏览器复制的网址在另一浏览器中不起作用

javascript - 如何在 JavaScript 中拆分数组的查询字符串