我提前道歉是因为无法提供更多信息,如果使用有限的信息无法做到这一点,我会删除这个问题。
所以,我有一个脚本可以生成一种依赖于脚本(也是动态生成)的搜索引擎,这个脚本非常复杂,我对它没有任何影响。
当您单击“应用(搜索)”按钮时,将触发搜索过程,您可以在具有一些参数的新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
答案 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);