js拆分URL,兼容全部类型URL

js拆分url,网上一搜有很多。但是为什么要写这篇文章呢。他们都有固定的缺点, 不支持多个?传参
例如:http://www.baidu.com/?name=9700&direct=http://www.sohu.com/?id=9700

我们可以分析一下URL都有几种特点
function UrlSplit(url){
    if(url.split("?") && url.split("?")[1]){
        var rsUrl = url.split("?");
        rsUrl.shift()
        var rs = rsUrl.join("?")
        if(rsUrl.length>1){
            var rs2 = rs.split("?")
            var arr=rs2[1].split("&");
            if(rs2[0].indexOf("&") == -1){
                arr.push(rs2[0])
            }else{
                arr = arr.concat(rs2[0].split("&"))
            }
        }else{
            var rs2 = unescape(rs).split("?")
            if(rs2.length == 1){
                var arr=rs2[0].split("&");
                arr.push(rs2[0])
            }else{
                var arr=rs2[1].split("&");
                arr.push(rs2[0])
            }
        }
        var json={};
        for(var i=arr.length-1;i>=0;i--){
            if(arr[i].indexOf("=")!=-1){
                json[arr[i].split("=")[0]]=arr[i].split("=")[1];
            }
            else{
                json[arr[i]]="undefined";
            }
        }
        return json
    }
    return null
}

我们测试一下

UrlSplit('http://www.baidu.com/')
结果:null
UrlSplit('http://www.baidu.com/#/')
结果:null
UrlSplit('http://www.baidu.com/')
结果:null
UrlSplit('http://www.baidu.com/?name=9700')
结果:{name:'9700'}
UrlSplit('http://www.baidu.com/?direct=http://www.sohu.com/')
结果:{direct:'http://www.sohu.com/'}
UrlSplit('http://www.baidu.com/?direct=http://www.sohu.com/?id=9700')
结果:{direct:'http://www.sohu.com/',id:'9700'}

终极测试复杂URL

案例一
UrlSplit('http://www.baidu.com/?names=百度&direct=http://www.sohu.com/?id=9700&name=九千七')
结果:{direct:'http://www.sohu.com/',names:'百度',name:'九千七',id:'9700'}
案例二
UrlSplit('http://www.baidu.com/#/?names=百度&direct=http://www.sohu.com/#/?id=9700&name=九千七')
结果:{direct:'http://www.sohu.com/#/',names:'百度',name:'九千七',id:'9700'}

完美解决所有类型,喜欢的可以收藏。代码没有注释,写的比较烂。因为我只是一个前端弟弟。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容