我正在寻找一个可以获取URL参数的jQuery插件,并支持此搜索字符串而不输出JavaScript错误:“格式错误的URI序列”。如果没有支持这个的jQuery插件,我需要知道如何修改它来支持这个。
?search=%E6%F8%E5
解码时,URL参数的值应为:
æøå
(字符是挪威语)。
我无法访问服务器,因此我无法对其进行任何修改。
答案 0 :(得分:418)
function getURLParameter(name) {
return decodeURI(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
答案 1 :(得分:294)
以下是我从这里的评论中创建的内容,以及修复未提及的错误(例如实际返回null,而不是'null'):
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
答案 2 :(得分:107)
你真正想要的是jQuery URL Parser plugin。使用此插件,获取特定URL参数(对于当前URL)的值如下所示:
$.url().param('foo');
如果你想要一个带有参数名称的对象作为键和参数值作为值,你只需要在没有参数的情况下调用param()
,如下所示:
$.url().param();
此库也适用于其他网址,而不仅仅是当前的网址:
$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes
由于这是一个完整的URL解析库,您还可以从URL获取其他信息,例如指定的端口,或路径,协议等:
var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'
它还有其他功能,请查看其homepage以获取更多文档和示例。
不是为 kinda 在大多数情况下工作的特定目的编写自己的URI解析器,而是使用实际的URI解析器。根据答案,其他答案的代码可以返回'null'
而不是null
,不能使用空参数(?foo=&bar=x
),无法一次解析并返回所有参数,如果您反复查询参数的URL等,则重复该工作。
使用实际的URI解析器,不要发明自己的。
对于那些厌恶jQuery的人,有a version of the plugin that's pure JS。
答案 3 :(得分:43)
如果你不知道URL参数是什么,并希望获得一个带有参数中的键和值的对象,你可以使用:
function getParameters() {
var searchString = window.location.search.substring(1),
params = searchString.split("&"),
hash = {};
if (searchString == "") return {};
for (var i = 0; i < params.length; i++) {
var val = params[i].split("=");
hash[unescape(val[0])] = unescape(val[1]);
}
return hash;
}
使用类似/posts?date=9/10/11&author=nilbus
的网址调用getParameters()将返回:
{
date: '9/10/11',
author: 'nilbus'
}
我不会在这里包含代码,因为它距离问题更远,但weareon.net发布了一个允许在URL中操作参数的库:
答案 4 :(得分:40)
您可以使用浏览器本机location.search属性:
function getParameter(paramName) {
var searchString = window.location.search.substring(1),
i, val, params = searchString.split("&");
for (i=0;i<params.length;i++) {
val = params[i].split("=");
if (val[0] == paramName) {
return unescape(val[1]);
}
}
return null;
}
但是有一些jQuery插件可以帮助你:
答案 5 :(得分:26)
基于999's answer:
function getURLParameter(name) {
return decodeURIComponent(
(location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
);
}
的变化:
decodeURI()
已替换为decodeURIComponent()
[?|&]
答案 6 :(得分:6)
需要添加i参数以使其不区分大小写:
function getURLParameter(name) {
return decodeURIComponent(
(RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
);
}
答案 7 :(得分:2)
$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href);
return (results !== null) ? results[1] : 0;
}
$.urlParam("key");
答案 8 :(得分:2)
你不应该像这样使用jQuery!
现代的方法是通过像Bower这样的包管理器来使用小型可重用模块。
我创建了一个可以将查询字符串解析为对象的小module。像这样使用它:
// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
答案 9 :(得分:2)
例如,一个返回任何参数变量值的函数。
function GetURLParameter(sParam)
{
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam)
{
return sParameterName[1];
}
}
}
这就是你可以使用这个函数,假设URL是,
<强> “http://example.com/?technology=jquery&blog=jquerybyexample”。强>
var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');
所以在上面的代码变量中,“tech”将“jQuery”作为值,“blog”变量将是“jquerybyexample”。
答案 10 :(得分:1)
在阅读了所有答案后,我最终得到了这个版本+第二个函数,将参数用作标志
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
function isSetURLParameter(name) {
return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}
答案 11 :(得分:0)
jQuery代码段,用于将存储在url中的动态变量作为参数存储,并将它们存储为可随脚本使用的JavaScript变量:
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
}
example.com?param1=name¶m2=&id=6
$.urlParam('param1'); // name
$.urlParam('id'); // 6
$.urlParam('param2'); // null
//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));
//output: Gold%20Coast
console.log(decodeURIComponent($.urlParam('city')));
//output: Gold Coast
答案 12 :(得分:0)
<script type="text/javascript">
function getURLParameter(name) {
return decodeURIComponent(
(location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
);
}
</script>
getURLParameter(id)
或getURLParameter(Id)
的工作方式相同:)
答案 13 :(得分:0)
这里有很多错误代码,正则表达式解决方案非常慢。我找到了一个比正则表达式快20倍的解决方案,并且非常简单:
/*
* @param string parameter to return the value of.
* @return string value of chosen parameter, if found.
*/
function get_param(return_this)
{
return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.
var url = window.location.href; // Get the URL.
var parameters = url.substring(url.indexOf("?") + 1).split("&"); // Split by "param=value".
var params = []; // Array to store individual values.
for(var i = 0; i < parameters.length; i++)
if(parameters[i].search(return_this + "=") != -1)
return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");
return "Parameter not found";
}
console.log(get_param("parameterName"));
正则表达式不是最重要的解决方案,对于这类问题,简单的字符串操作可以更有效地工作。 Code source
答案 14 :(得分:-1)
万一你们有像localhost / index.xsp这样的网址?a = 1#的东西,你需要得到的参数不是哈希。
var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
anchor = hash[1].split('#');
vars.push(anchor[0]);
vars[hash[0]] = anchor[0];
}
}
答案 15 :(得分:-1)
@pauloppenheim对答案的轻微修改,因为它无法正确处理可能是其他参数名称一部分的参数名称。
例如:如果你有“appenv”&amp; “env”参数,重新定义“env”的值可以获取“appenv”值。
修正:
var urlParamVal = function (name) {
var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
return result ? decodeURIComponent(result[2]) : "";
};
答案 16 :(得分:-1)
我创建了一个简单的函数来从这样的URL获取JavaScript中的URL参数:
.....58e/web/viewer.html?page=*17*&getinfo=33
function buildLinkb(param) {
var val = document.URL;
var url = val.substr(val.indexOf(param))
var n=parseInt(url.replace(param+"=",""));
alert(n+1);
}
buildLinkb("page");
输出:18
答案 17 :(得分:-1)
function getURLParameters(paramName)
{
var sURL = window.document.URL.toString();
if (sURL.indexOf("?") > 0)
{
var arrParams = sURL.split("?");
var arrURLParams = arrParams[1].split("&");
var arrParamNames = new Array(arrURLParams.length);
var arrParamValues = new Array(arrURLParams.length);
var i = 0;
for (i=0;i<arrURLParams.length;i++)
{
var sParam = arrURLParams[i].split("=");
arrParamNames[i] = sParam[0];
if (sParam[1] != "")
arrParamValues[i] = unescape(sParam[1]);
else
arrParamValues[i] = "No Value";
}
for (i=0;i<arrURLParams.length;i++)
{
if(arrParamNames[i] == paramName){
//alert("Param:"+arrParamValues[i]);
return arrParamValues[i];
}
}
return "No Parameters Found";
}
}
答案 18 :(得分:-2)
这可能有所帮助。
<script type="text/javascript">
$(document).ready(function(){
alert(getParameterByName("third"));
});
function getParameterByName(name){
var url = document.URL,
count = url.indexOf(name);
sub = url.substring(count);
amper = sub.indexOf("&");
if(amper == "-1"){
var param = sub.split("=");
return param[1];
}else{
var param = sub.substr(0,amper).split("=");
return param[1];
}
}
</script>