javascript - 如何将参数添加到已包含其他参数并且可能包含 anchor 的 URL

标签 javascript

我想知道如何向现有网址添加新参数。 问题是:url 也可能包含 anchor 。

例如:

http://www.example.com?foo=bar#hashme

我想给它添加另一个参数,所以结果是这样的:

http://www.example.com?foo=bar&x=y#hashme

最佳答案

我使用了 The Awesome One 的部分解决方案,以及在这个问题上找到的解决方案:

Adding a parameter to the URL with JavaScript

将它们组合到这个脚本中:

function addParameter(url, parameterName, parameterValue, atStart/*Add param before others*/){
    replaceDuplicates = true;
    if(url.indexOf('#') > 0){
        var cl = url.indexOf('#');
        urlhash = url.substring(url.indexOf('#'),url.length);
    } else {
        urlhash = '';
        cl = url.length;
    }
    sourceUrl = url.substring(0,cl);

    var urlParts = sourceUrl.split("?");
    var newQueryString = "";

    if (urlParts.length > 1)
    {
        var parameters = urlParts[1].split("&");
        for (var i=0; (i < parameters.length); i++)
        {
            var parameterParts = parameters[i].split("=");
            if (!(replaceDuplicates && parameterParts[0] == parameterName))
            {
                if (newQueryString == "")
                    newQueryString = "?";
                else
                    newQueryString += "&";
                newQueryString += parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:'');
            }
        }
    }
    if (newQueryString == "")
        newQueryString = "?";

    if(atStart){
        newQueryString = '?'+ parameterName + "=" + parameterValue + (newQueryString.length>1?'&'+newQueryString.substring(1):'');
    } else {
        if (newQueryString !== "" && newQueryString != '?')
            newQueryString += "&";
        newQueryString += parameterName + "=" + (parameterValue?parameterValue:'');
    }
    return urlParts[0] + newQueryString + urlhash;
};

示例:addParameter('http://www.example.com?foo=bar#hashme', 'bla', 'valuebla', false)

结果在 http://www.example.com?foo=bar&bla=valuebla#hashme

关于javascript - 如何将参数添加到已包含其他参数并且可能包含 anchor 的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953944/

相关文章:

javascript - 具有后端授权的 JavaScript 安全模式?

Javascript new Date(string) 晚一天返回

javascript - 如何让div切换onclick,子div没有id

javascript - 在 Javascript 中将方法分配给变量

javascript - 在新的 typescript 文件 (0.9) 中使用现有的 AMD js 模块

javascript - 所以我想在某种情况下停止程序

javascript - 将来自 angularjs 范围的数据附加到 div 中

javascript - 在 AJAX 启动时加载 GIF/显示文本并在 AJAX 停止时隐藏

javascript - 使用 Javascript 绘制 3D 元素

javascript - 如何获取调用该函数的html元素的ID? (Jquery/Javascript)