V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
iugo
V2EX  ›  分享创造

用 JavaScript 获取 URL 中任意存在的参数

  •  
  •   iugo ·
    iugo · 2015-03-28 11:31:54 +08:00 · 2464 次点击
    这是一个创建于 3323 天前的主题,其中的信息可能已经有所发展或是发生改变。
    - 新手, 期待意见.
    - 说明: 纯 JavaScript 实现, 没有用 jQuery.
    - 代码:

    想将其封装为一个类, 达成

    var id = new valueURL("id") // id = 123

    这样的效果. 但是还不知道该怎么下手.
    7 条回复    2015-09-30 16:37:33 +08:00
    loading
        1
    loading  
       2015-03-28 11:42:20 +08:00 via Android
    这应该发 问与答,创造问题不属于创造!
    iugo
        2
    iugo  
    OP
       2015-03-28 11:54:37 +08:00
    @loading 刚才我想了想, 没有作为类, 而是先写成了函数. JavaScript 怎么写类不明白. 不过功能已经实现, 可以正常用.

    我的写法和网上搜索到的不一样, 希望从另外一个角度给大家带来点什么东西.
    zrp1994
        3
    zrp1994  
       2015-03-28 12:04:46 +08:00   ❤️ 1
    @iugo 草草写了个,你感受下
    var parseQuery = function(string) {
    var urlSplit = string.split('?'), querySplit = [], queries = {};
    if(urlSplit.length < 2 || !urlSplit[1])
    return null;
    querySplit = urlSplit[1].split('&');
    for (var i = 0; i < querySplit.length; i++) {
    var query = querySplit[i].split('=');
    if(query.length > 0 && query[0])
    queries[query[0]] = query[1];
    };
    return queries;
    }

    console.log(parseQuery('https://www.baidu.com/s?ie=UTF-8&wd=%E6%B5%8B%E8%AF%95'));
    console.log(parseQuery('https://www.baidu.com/s?ie=UTF-8&=%E6%B5%8B%E8%AF%95'));
    console.log(parseQuery('https://www.baidu.com/s?ie=UTF-8&wd='));
    console.log(parseQuery('https://www.baidu.com/s?ie=UTF-8&='));
    console.log(parseQuery('https://www.baidu.com/s?ie=UTF-8'));
    console.log(parseQuery('https://www.baidu.com/s?'));
    console.log(parseQuery('https://www.baidu.com/s'));

    测试结果:
    { ie: 'UTF-8', wd: '%E6%B5%8B%E8%AF%95' }
    { ie: 'UTF-8' }
    { ie: 'UTF-8', wd: '' }
    { ie: 'UTF-8' }
    { ie: 'UTF-8' }
    null
    null
    ETiV
        4
    ETiV  
       2015-03-28 12:36:48 +08:00   ❤️ 1
    nowgoo
        5
    nowgoo  
       2015-03-28 13:37:02 +08:00   ❤️ 1
    function get_value(name, url) {
    return (url.substr(url.indexOf('?')).substr(1).match(new RegExp('(?:^|&)' + name + '=([^&]*)(?:&|$)', 'i')) || [])[1] || '';
    }
    sumhat
        6
    sumhat  
       2015-03-28 21:58:40 +08:00   ❤️ 1
    楼上的几位,对于有 # 的 URL,你们的代码肯定挂
    iugo
        7
    iugo  
    OP
       2015-09-30 16:37:33 +08:00
    @sumhat 在 @ETiV 的代码中, 稍微修改下正则应该就会好.

    /[?&]:?([^=]+)=([^&#]*)/g
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   754 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:08 · PVG 05:08 · LAX 14:08 · JFK 17:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.