更改按钮单击时请求的URL的参数

时间:2012-10-22 12:13:21

标签: javascript jquery

我提前道歉是因为无法提供更多信息,如果使用有限的信息无法做到这一点,我会删除这个问题。

所以,我有一个脚本可以生成一种依赖于脚本(也是动态生成)的搜索引擎,这个脚本非常复杂,我对它没有任何影响。

当您单击“应用(搜索)”按钮时,将触发搜索过程,您可以在具有一些参数的新URL上查看结果。

E. g.: http://www..example.com/...&ThisParameter=XYZ&SecondParameter=foo&ThirdParameter=bar

我的问题是 - 是否可以将"ThisParameter=XYZ"更改为其他内容,例如: G。 "ThisParameter=Something"

问题在于我不知道如何构建URL并且不会影响它,因此我需要一个代码,它只会生成任何URL并更改此部分。

提前感谢您的意见!

修改

我找到了影响生成的网址的脚本部分。当我在DOM中更改它时,它会将我重定向到所需的页面。

var options = {"FOO":123,"BAR":"ABC","ThisParameter":"STH","EXAMPLE":123, ...}

这是您选择“复制路径”时的输出:

_options[0].ThisParameter

4 个答案:

答案 0 :(得分:1)

如果查询参数的顺序总是相同的:

var url = window.location.href;
var lst_temp = url.split('?');
var $lst_parts = lst_temp[1].split('&');

var new_val = 'blabla';
var position = 'x';
lst_parts[x] = 'ThisParameter=' + new_val;

var url_new = lst_temp[0] + '?';
url_new += lst_parts.join('&');

编辑:
如果在手之前没有知道查询钥匙的订购,请执行此操作:

从此处使用此功能:https://stackoverflow.com/a/111545/888177

function EncodeQueryData(arr_data) {
   var ret = [];
   for (var d in arr_data)
      ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(arr_data[d]));
   return ret.join("&");
}

然后阅读网址并将其拆分为:

var url = window.location.href;
var key = "ThisParameter";
var new_val = 'blabla';
var lst_temp = url.split('?');
var lst_parts = lst_temp[1].split('&');   

添加此循环以创建包含查询参数和值的关联数组:

var arr_data = new Array();
for (var index in lst_parts) {
   lst = lst_parts[index].split('=');
   arr_data[lst[0]] = lst[1];
}

为了避免无休止的刷新:

var val = arr_data[key];
if (val != new_val) {
  arr_data[key] = new_val;
  var  new_url = lst_temp[0] + '?' + EncodeQueryData(arr_data);
  window.location.href = new_url;
}

答案 1 :(得分:1)

如果不重新加载页面,您将无法更改网址,但以下内容可让您进行调整。它需要当前页面的URL(来源在解释中不清楚)。如果您引用的URL位于链接的href中,则可以简单地修改此代码

/* get current url info using location object*/
var baseUrl = location.href.split('?')[0];
/* array of search strings */
var searchParams = location.search.slice(1).split('&');
var searchKeyToChange = 'ThisParameter';
var newVal = 'someNewValue';

var doPageReload = false;
/* loop over search strings, modify appropriate one*/
for (i = 0; i < searchParams.length; i++) {
    var params = searchParams[i].split('=');
    if (params[0] == searchKeyToChange) {
        if (params[1] != newVal) {
            searchParams[i] == searchKeyToChange + '=' + newVal;
            doPageReload = true;
        }
    }
} /* load adjusted url if new value not already set*/
if (doPageReload) {
    location = baseUrl + '?' + searchParams.join('&');
}

答案 2 :(得分:0)

您可以简单地进行正则表达式替换,或者按?然后按&拆分以获取参数值对的数组。

答案 3 :(得分:0)

如果您的问题是如何使用JavaScript动态更改浏览器中的URL,则无法(出于安全原因)。 如果您只需要通过使用然后更改URL来请求页面,则可以使用之前评论中的方式: window.location.replace(yourModifiedUrl);

相关问题