从QueryString和Hash读取值?

时间:2013-05-28 13:06:37

标签: javascript query-string

有一小部分js代码可以读取查询字符串。

然而,在我看到facebook login的回复之后,这就像是

http://localhost:55643/WebSite2/HTMLPage2.htm#access_token=CAACSIC6Koe......roHXCK8ZD&expires_in=5439

我告诉自己,我必须编写一些代码来处理散列后的值(#)。

所以我做了:

(function ($)
    {
        $.getQs = function (specificUrl)
        {
            var st = specificUrl || window.location.href;
            var o = {}, e;
            var re = /([^#?&=]+)=([^&#]*)/ig;
            while (e = re.exec(st))
            {
                o[e[1]] = e[2];
            }
            //console.log(o);
            return o;
        }
    })(jQuery);

这将在QShash

下返回所有值对象

(如果未定义specifiedUrl - 它会查看浏览器网址)

用法1 :(对于特定网址):

console.log($.getQs('www.example.com?ferko=suska&ee=huu#a=1&b=2&c=3'));

这将返回

Object {ferko: "suska", ee: "huu", a: "1", b: "2", c: "3"}

用法2:(对于当前网址):

我当前的网址:

http://localhost:55643/WebSite2/HTMLPage.htm?ferko=suska&ee=huu#a=1&b=2&c=3

所以$.getQs()

也会产生

Object {ferko: "suska", ee: "huu", a: "1", b: "2", c: "3"}

问题出在哪里?

这里是:

http://localhost:55643/WebSite2/HTMLPage.htm?ferko=suska&ee=huu#a=1&b=2&c=3&ee=grrr

另请注意,QS已eehash方也有ee

我可以在我的对象中反映出来吗?

修改

这就是我正在阅读facebook所需的价值

console.log($.getQs('http://localhost:55643/WebSite2/HTMLPage2.htm#access_token=CAACSIC6KoeroHXCK8ZD&expires_in=5439').access_token);

产量

CAACSIC6KoeroHXCK8ZD

1 个答案:

答案 0 :(得分:1)

(function ($) {
    $.getQs = function (specificUrl) {

        function parseToObj(str, re) {
          var o = {};
          while(e = re.exec(str))
            o[e[1]] = e[2];
          return o;
        }

        var st = specificUrl || window.location.href;

        return {
          beforeHash: parseToObj(st, /([^#?&=]+)=([^&#]*)(?=.*?\#)/ig),
          afterHash: parseToObj(st, /([^#?&=]+)=([^&#]*)(?!.*?\#)/ig)
        };
    }
})(jQuery);

或更好的解决方案:

(function ($) {
    $.getQs = function (specificUrl) {

        function parseToObj(str, re) {
          var o = {};
          while(e = re.exec(str))
            o[e[1]] = e[2];
          return o;
        }

        var st = specificUrl || window.location.href;
        var hashPos = st.indexOf('#');
        if(hashPos == -1) hashPos = st.length;

        return {
          beforeHash: parseToObj(st.substring(0, hashPos), /([^#?&=]+)=([^&#]*)/ig),
          afterHash: parseToObj(st.substring(hashPos), /([^#?&=]+)=([^&#]*)/ig)
        };
    }
})(jQuery);