jQuery拆分/替换URL的一部分

时间:2012-09-26 13:01:29

标签: jquery url replace split

我有这个网址

http://9001/transactions

我有按钮需要更改网址,例如

http://9001/transactions?type=all
http://9001/transactions?type=confirmed
http://9001/transactions?type=unconfirmed

如何在交易后更换字符串。我有点击功能,只需要知道放在里面的东西。

url会改变,所以这不能依赖于事务之前的任何事情(如果这是有道理的)。对不起,如果问题含糊不清,但大肆忙着完成。

4 个答案:

答案 0 :(得分:1)

你可以建立一个改变GET参数的函数......

var updateGetParam = function(key, value) {

    window.location.search = window.location.search.replace(new RegExp("([?&;])" + key + "=.*?(&|;|$)"), "$1" + key + "=" + encodeURIComponent(value) + "$2");

}

jsFiddle

您应首先通过正则表达式转义功能运行用户输入。

答案 1 :(得分:1)

我写了一个函数来完成这个,它重新加载当前页面,并完全支持更改现有的url变量(以及添加新的变量)。您所要做的就是将对象文字传递给函数。见这里:https://stackoverflow.com/a/10235376/733347

在你的情况下,你需要做的就是调用这个函数

reloadWithQueryStringVars({"type": "all"});

reloadWithQueryStringVars({"type": "confirmed"});

reloadWithQueryStringVars({"type": "unconfirmed"});

关于按钮的点击事件

以下是整个参考函数:

function reloadWithQueryStringVars (queryStringVars) {
    var existingQueryVars = location.search ? location.search.substring(1).split("&") : [],
        currentUrl = location.search ? location.href.replace(location.search,"") : location.href,
        newQueryVars = {},
        newUrl = currentUrl + "?";
    if(existingQueryVars.length > 0) {
        for (var i = 0; i < existingQueryVars.length; i++) {
            var pair = existingQueryVars[i].split("=");
            newQueryVars[pair[0]] = pair[1];
        }
    }
    if(queryStringVars) {
        for (var queryStringVar in queryStringVars) {
            newQueryVars[queryStringVar] = queryStringVars[queryStringVar];
        }
    }
    if(newQueryVars) { 
        for (var newQueryVar in newQueryVars) {
            newUrl += newQueryVar + "=" + newQueryVars[newQueryVar] + "&";
        }
        newUrl = newUrl.substring(0, newUrl.length-1);
        window.location.href = newUrl;
    } else {
        window.location.href = location.href;
    }
}

答案 2 :(得分:0)

查看此代码是否适合您:

var href = window.location.href;

// This assumes the value of your button is the action and each
// button has the class button applied. Modify as necessary
$('.button').click(function (event) {
    if (href.lastIndexOf('?') !== -1) {
        href.replace(/\?(.*)/, '?type=' + $(this).val());
    } else {
        href += '?type=' + $(this).val();
    }
    window.location.href = href;
});

答案 3 :(得分:0)

一个非常粗略的解决方案,但它更容易理解和实施,看看是否有帮助

var url = "http://9001/transactions?type=unconfirmed"; //in live environment, replace with var url = window.location.href;
var urlArray = url.split('?');
var urlArrayLength = url.split('?').length;


urlArray[urlArrayLength - 1] = "type=newValue";


url  = urlArray.join('?');

alert(url)