用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 + '\n' + arg + '\n' + arg_val;
}
document.write(changeUrlArg('http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1', 'id', 5));
</script>

通過上述,得達到我們想要的結果,不懂的可以留言或者代碼能優化的,可以留言,共同進步,嘿嘿嘿

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM