1

我正在尝试从浏览器获取 URL 参数。

浏览器有这样的 URL

http://localhost/red/prepareslide.php?p=trng&s=1

但我想获取参数,也就是说,我想在(问号)“?”之后获取所有参数

输出应该是这样的我该p=trng&s=1 怎么做?

这是我的代码:

<!DOCTYPE html>
<html>
</head>
<script>
function call(){
URL = window.location.toString();

var query = URL.match(/\?/);
alert(query);
var queryList = query.split("?");
for (var i=0; i<queryList.length; i++) 
{
var element = queryList[i].split("=");
var ex=document.write(element[0] + " = " + unescape(element[1]) + "\r\n");
alert(ex);
}
}
</script>



</head>
<body>

<a href="#" onclick="call();">click</a>
</body>
</html>
4

5 回答 5

2

编辑:some1 通知我的代码段包含一个缺陷。他是对的。如果 URL 中没有问号,则结果将是完整的 url。

由于您的目标是获取问号后的字符,因此应该可以完成工作,

// obtain browser url
var currUrl = document.URL;
// split string to obtain substring
var index; var str;
if((index = currUrl.indexOf("?")) > 0) str = currUrl.substring(index + 1);

但这确实可以更快。就像下面评论的一样,

// obtain browser url
var currUrl = document.URL;
// replace the string that only after ? returns as results
var str = currUrl.replace(/^[^?]*\?/, '');
// check result
if(str != '') {
    // do your task here with the result 
}

如果这是一个有用的回复,如果您想给予信任,请将其提供给 ElLocoCocoLoco(他的评论)和/或 Ruslan Bes 以获取替换技巧。(虽然也是正确的)。

于 2013-07-23T12:02:46.720 回答
1

You can;

document.location.search.replace(/\??([^&=]+)=([^&=]*)/g, function(p, k, v) {
    document.write(k + " = " + decodeURIComponent(v) + "</ br>");
})
于 2013-07-23T12:37:28.327 回答
0

如果您只需要 params 部分,您可以尝试如下:

var urlParams = window.location.href.split('?')[1] ;
于 2013-07-23T12:10:05.137 回答
0

这是正确且完整的方法

    var url = window.location.href;

    var endChar = url.indexOf('#');
    if(endChar==-1)
    {
        endChar = url.length;
    }
    var queryChar = url.indexOf('?');

    var queryPart="";
    if(queryChar!=-1)
    {
        queryPart = url.slice(url.indexOf('?') + 1,endChar);  
    }
于 2013-07-23T12:15:08.630 回答
0

你的 RE /\?/只会返回,你应该使用 /\?\S+/,这将导致?p=trng&s=1,然后相应地使用 split() ,#also 处理不需要的符号?结果。

于 2013-07-23T12:16:09.927 回答