zoukankan      html  css  js  c++  java
  • 用javascript替换URL中的参数值

    最近在网上看到的JS替换URL的值,基本都是

    function changeUrlArg(url, arg, arg_val){
        var pattern = arg+'=([^&]*)';
        var replaceText = arg+'='+arg_val;
        return url.match(pattern) ? url.replace(eval('/('+ arg+'=)([^&]*)/gi'), replaceText) : (url.match('[?]') ? url+'&'+replaceText : url+'?'+replaceText);
    }

    但是这个是有问题的,例如:url为:http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1,arg为id,arg_val为5,

    通过替换的到:http://www.lllllllllll.com/test.testhtml?typeId=5&id=5&user_id=5,很面试这3个值都变了,因为替换值的时候是以“id=([^&]*)”为主的,还有正则是排除了大小写的,所以说新的值会替换所有的符合条件的。

    然后我们实际想要的是:http://www.lllllllllll.com/test.testhtml?typeId=3&id=5&user_id=1,

    进行实际操作,下面代码可自行优化:

    <script>
    /* 
    * 替换URL的参数值
    * url 目标url
    * arg 需要替换的参数名称 
    * arg_val 替换后的参数的值 
    * return url 参数替换后的url 
    */
    function changeURLArg(url, arg, arg_val) {
        var pattern = arg + '=([^&]*)';
        var replaceText = arg + '=' + arg_val;
        if (url.match(pattern)) {
            var retuenUrl = url;
            var temp = '/(&' + arg + '=)([^&]*)/gi';
            if (eval(temp).test(retuenUrl)) {
            retuenUrl = retuenUrl.replace(eval(temp), '&' + replaceText);
            }
            var temps = '/([?])(' + arg + '=)([^&]*)/gi';
            if (eval(temps).test(retuenUrl)) {
            retuenUrl = retuenUrl.replace(eval(temps), '?' + replaceText);
            }
            return retuenUrl;
        }
        else {
            // if (url.match('[?]')) {
            if (url.indexOf('?') > 0) {
                return url + "&" + replaceText;
            } else {
                return url + "?" + replaceText;
            }
        }
        return url + '
    ' + arg + '
    ' + arg_val;
    }
    document.write(changeUrlArg('http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1', 'id', 5));
    </script>

    通过上述,得达到我们想要的结果,不懂的可以留言或者代码能优化的,可以留言,共同进步,嘿嘿嘿

  • 相关阅读:
    SQLSERVER中的sp_reset_connection存储过程的作用
    SQLSERVER数据库经常置疑的原因
    sqlserver2005数据库邮件
    SQLSERVER书签查找的通俗理解
    msdb数据库里的表究竟存储什么信息
    造成阻塞和死锁的3大原因:
    SQLSERVER中的锁资源类型RID KEY PAG EXT TAB DB FIL
    总结一下要影响SQLSERVER锁的申请和释放行为要考虑的因素
    Linux下getsockopt/setsockopt 函数说明
    HTTP协议详解(转)
  • 原文地址:https://www.cnblogs.com/yueyongsheng/p/13852231.html
Copyright © 2011-2022 走看看