我正在寻找一个 jQuery 插件,它可以获取 URL 参数,并支持这个搜索字符串而不输出 JavaScript 错误:“格式错误的 URI 序列”。如果没有支持此功能的 jQuery 插件,我需要知道如何修改它以支持此功能。
?search=%E6%F8%E5
URL 参数的值在解码时应为:
æøå
(字符是挪威语)。
我无权访问服务器,因此无法对其进行任何修改。
我正在寻找一个 jQuery 插件,它可以获取 URL 参数,并支持这个搜索字符串而不输出 JavaScript 错误:“格式错误的 URI 序列”。如果没有支持此功能的 jQuery 插件,我需要知道如何修改它以支持此功能。
?search=%E6%F8%E5
URL 参数的值在解码时应为:
æøå
(字符是挪威语)。
我无权访问服务器,因此无法对其进行任何修改。
function getURLParameter(name) {
return decodeURI(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
以下是我根据此处的评论创建的内容,以及修复未提及的错误(例如实际返回 null,而不是“null”):
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
您真正想要的是jQuery URL Parser 插件。使用此插件,获取特定 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'
它还具有其他功能,请查看其主页以获取更多文档和示例。
与其为这个在大多数情况下都可以工作的特定目的编写自己的 URI 解析器,不如使用实际的 URI 解析器。根据答案,来自其他答案的代码可以返回而不是,不适用于空参数 ( ),无法一次解析和返回所有参数,如果重复查询参数的 URL 则重复工作等。'null'
null
?foo=&bar=x
使用实际的 URI 解析器,不要自己发明。
对于那些不喜欢 jQuery 的人,有一个纯 JS 版本的插件。
如果您不知道 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;
}
使用类似的 url 调用 getParameters()/posts?date=9/10/11&author=nilbus
将返回:
{
date: '9/10/11',
author: 'nilbus'
}
我不会在这里包含代码,因为它离问题更远,但是weareon.net 发布了一个库,它也允许操作 URL 中的参数:
您可以使用浏览器本机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 插件可以帮助您: