Spiga

【转】Javascript 获取链接(url)参数的方法

2011-01-03 22:38 by flyingfish, 427 visits, 收藏, 编辑

代码
Javascript 获取链接(url)参数的方法
作者: YITU.org 来源: YITU.org 时间:
2007-02-26 10:34:58
摘要: 有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值。本文给出的就是这个流程的具体实现方法。

当然,我们也可以用正则直接匹配,文章中也给出了一个正则的例子。
归类: Javascript,
关键词: parameter, 参数, location.href, url, 链接, javascript,
收藏本页到:
有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值。本文给出的就是这个流程的具体实现方法。

当然,我们也可以用正则直接匹配,文章中也给出了一个正则的例子。


--------------------------------------------------------------
点此浏览示例文件
--------------------------------------------------------------


分解链接的方式:
Javascript:

<script type="text/javascript">
<!--
// 说明:Javascript 获取链接(url)参数的方法
//
整理:http://www.CodeBit.cn

function getQueryString(name)
{
// 如果链接没有参数,或者链接中不存在我们要获取的参数,直接返回空
if(location.href.indexOf("?")==-1 || location.href.indexOf(name+'=')==-1)
{
return '';
}

// 获取链接中参数部分
var queryString = location.href.substring(location.href.indexOf("?")+1);

// 分离参数对 ?key=value&key2=value2
var parameters = queryString.split("&");

var pos, paraName, paraValue;
for(var i=0; i<parameters.length; i++)
{
// 获取等号位置
pos = parameters[i].indexOf('=');
if(pos == -1) { continue; }

// 获取name 和 value
paraName = parameters[i].substring(0, pos);
paraValue
= parameters[i].substring(pos + 1);

// 如果查询的name等于当前name,就返回当前值,同时,将链接中的+号还原成空格
if(paraName == name)
{
return unescape(paraValue.replace(/\+/g, " "));
}
}
return '';
};

//http://localhost/test.html?aa=bb&test=cc+dd&ee=ff
alert(getQueryString('test'));
//-->
</script>




用正则匹配的方式:
Javascript:

<script type="text/javascript">
<!--
function getQueryStringRegExp(name)
{
var reg = new RegExp("(^|\\?|&)"+ name +"=([^&]*)(\\s|&|$)", "i");
if (reg.test(location.href)) return unescape(RegExp.$2.replace(/\+/g, " ")); return "";
};

//http://localhost/test.html?aa=bb&test=cc+dd&ee=ff
alert(getQueryStringRegExp('test'));
//-->
</script>

 

Add your comment

2 条回复

  1. #1楼 微生物      2011-02-21 11:41
    我给楼主一个更好的方法吧

    /**
    *@param {string} url 完整的URL地址
    *@returns {object} 自定义的对象
    *@description 用法示例:var myURL = parseURL('http://abc.com:8080/dir/index.html?id=255&m=hello#top');<br/>myURL.file='index.html'<br/>myURL.hash= 'top'<br/>myURL.host= 'abc.com'<br/>myURL.query= '?id=255&m=hello'<br/>myURL.params= Object = { id: 255, m: hello }<br/>myURL.path= '/dir/index.html'<br/>myURL.segments= Array = ['dir', 'index.html']<br/>myURL.port= '8080'<br/>yURL.protocol= 'http'<br/>myURL.source= 'http://abc.com:8080/dir/index.html?id=255&m=hello#top'
    */
    function parseURL(url) {
    var a = document.createElement('a');
    a.href = url;
    return {
    source: url,
    protocol: a.protocol.replace(':',''),
    host: a.hostname,
    port: a.port,
    query: a.search,
    params: (function(){
    var ret = {},
    seg = a.search.replace(/^\?/,'').split('&'),
    len = seg.length, i = 0, s;
    for (;i<len;i++) {
    if (!seg[i]) { continue; }
    s = seg[i].split('=');
    ret[s[0]] = s[1];
    }
    return ret;
    })(),
    file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
    hash: a.hash.replace('#',''),
    path: a.pathname.replace(/^([^\/])/,'/$1'),
    relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
    segments: a.pathname.replace(/^\//,'').split('/')
    };
    }
     回复 引用 查看   
  2. #2楼 微生物      2011-02-21 11:42
    这个是园子里司徒正美的博客提供的,我已经成功的写到项目的核心库里面了,结果事实检验没有任何错误,~。~。
     回复 引用 查看