我需要解析查询字符串www.mysite.com/default.aspx?dest=aboutus.aspx。 如何在JavaScript中获得dest变量?
当前回答
我想在页面上的DOM元素中获取特定的链接,将这些用户发送到计时器上的重定向页面,然后将他们传递到原始点击的URL上。这就是我如何使用常规javascript结合上面的方法之一。
带有链接的页面:头
function replaceLinks() {
var content = document.getElementById('mainContent');
var nodes = content.getElementsByTagName('a');
for (var i = 0; i < document.getElementsByTagName('a').length; i++) {
{
href = nodes[i].href;
if (href.indexOf("thisurl.com") != -1) {
nodes[i].href="http://www.thisurl.com/redirect.aspx" + "?url=" + nodes[i];
nodes[i].target="_blank";
}
}
}
}
Body
<body onload="replaceLinks()">
重定向页面 头
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
console.log('Query variable %s not found', variable);
}
function delayer(){
window.location = getQueryVariable('url')
}
Body
<body onload="setTimeout('delayer()', 1000)">
其他回答
我想要一个简单的函数,它接受URL作为输入,并返回查询参数的映射。 如果我要改进这个函数,我将支持URL中数组数据的标准,和或嵌套变量。
这应该可以用于jQuery。参数(qparams)函数。
function getQueryParams(url){
var qparams = {},
parts = (url||'').split('?'),
qparts, qpart,
i=0;
if(parts.length <= 1 ){
return qparams;
}else{
qparts = parts[1].split('&');
for(i in qparts){
qpart = qparts[i].split('=');
qparams[decodeURIComponent(qpart[0])] =
decodeURIComponent(qpart[1] || '');
}
}
return qparams;
};
下面的函数将用正则表达式解析搜索字符串,缓存结果并返回所请求变量的值:
window.getSearch = function(variable) {
var parsedSearch;
parsedSearch = window.parsedSearch || (function() {
var match, re, ret;
re = /\??(.*?)=([^\&]*)&?/gi;
ret = {};
while (match = re.exec(document.location.search)) {
ret[match[1]] = match[2];
}
return window.parsedSearch = ret;
})();
return parsedSearch[variable];
};
您可以不带任何参数地调用它一次,然后使用窗口。parsedSearch对象,或者随后调用getSearch。 我还没有完全测试这个,正则表达式可能仍然需要一些调整…
下面是一个快速简单的JavaScript查询字符串解析方法:
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
console.log('Query variable %s not found', variable);
}
现在向page.html发起请求?x =你好:
console.log(getQueryVariable('x'));
这个怎么样?
function getQueryVar(varName){
// Grab and unescape the query string - appending an '&' keeps the RegExp simple
// for the sake of this example.
var queryStr = unescape(window.location.search) + '&';
// Dynamic replacement RegExp
var regex = new RegExp('.*?[&\\?]' + varName + '=(.*?)&.*');
// Apply RegExp to the query string
var val = queryStr.replace(regex, "$1");
// If the string is the same, we didn't find a match - return false
return val == queryStr ? false : val;
}
..然后用:
alert('Var "dest" = ' + getQueryVar('dest'));
干杯
以下是我对@bobby发布的答案的评论,这是我将使用的代码:
function parseQuery(str)
{
if(typeof str != "string" || str.length == 0) return {};
var s = str.split("&");
var s_length = s.length;
var bit, query = {}, first, second;
for(var i = 0; i < s_length; i++)
{
bit = s[i].split("=");
first = decodeURIComponent(bit[0]);
if(first.length == 0) continue;
second = decodeURIComponent(bit[1]);
if(typeof query[first] == "undefined") query[first] = second;
else if(query[first] instanceof Array) query[first].push(second);
else query[first] = [query[first], second];
}
return query;
}
这段代码接受所提供的查询字符串(作为'str')并返回一个对象。字符串在所有&出现的情况下都被拆分,从而生成一个数组。然后遍历数组,其中的每一项都用“=”分隔。这将导致子数组,其中第0个元素是参数,第1个元素是值(如果no =符号则为undefined)。它们被映射到对象属性,例如字符串"hello=1&another=2&something"被转换为:
{
hello: "1",
another: "2",
something: undefined
}
此外,这段代码注意到重复出现,如“hello=1&hello=2”,并将结果转换为一个数组,例如:
{
hello: ["1", "2"]
}
您还会注意到它处理不使用=符号的情况。它还忽略&符号后面是否有一个等号。
对于最初的问题有点过度,但如果你需要在javascript中使用查询字符串,这是一个可重用的解决方案:)
推荐文章
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?
- 什么时候.then(success, fail)被认为是承诺的反模式?
- 转换JSON字符串到JSON对象c#