(JSメモ)IE未対応のUrlSearchParamsの機能をpolyfillを使わずに補完するための関数
14766 ワード
同じような機能の関数は既に幾つかQiitaに転がっているようですが、ハッシュ(URL末尾の#
+ 任意の文字列)などを考慮していない(最後のパラメータの値にハッシュが混入してしまう)、あるいはパラメータ部分のみ入力して使うことを想定しているものばかりだったので、「ハッシュ付きURL」「相対パスのURL」「パラメータのみ」であっても正確にパラメータをパースできる関数を書きました。
関数
var _URL = function(url){
return(function(o,u,a,b,c,d){
return(d=a?(function(_){
return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))
})(u.slice(a.index+1)):u,
d==''&&(d=null),
b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){
return v
}).forEach(function(v){
(function(_){
o[_[1]]=_[2]
})(v.match(/(.+?)=(.*)/))
})),{base:d,hash:c,param:o})
})({},url,url.match(/\?|#.*?$/))
};
縮小版
var _URL = function(url){return(function(o,u,a,b,c,d){return(d=a?(function(_){return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))})(u.slice(a.index+1)):u,d==''&&(d=null),b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){return v}).forEach(function(v){(function(_){o[_[1]]=_[2]})(v.match(/(.+?)=(.*)/))})),{base:d,hash:c,param:o})})({},url,url.match(/\?|#.*?$/))};
使い方
console.log(
_URL('https://www.youtube.com/watch?v=BoZ0Zwab6Oc&t=56s#contents')
);
{
base: "https://www.youtube.com/watch",
hash: "contents",
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
console.log(
_URL('/watch?v=BoZ0Zwab6Oc&t=56s')
);
{
base: "/watch",
hash: null,
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
console.log(
_URL('?v=BoZ0Zwab6Oc&t=56s#')
);
{
base: null,
hash: "",
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
var _URL = function(url){
return(function(o,u,a,b,c,d){
return(d=a?(function(_){
return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))
})(u.slice(a.index+1)):u,
d==''&&(d=null),
b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){
return v
}).forEach(function(v){
(function(_){
o[_[1]]=_[2]
})(v.match(/(.+?)=(.*)/))
})),{base:d,hash:c,param:o})
})({},url,url.match(/\?|#.*?$/))
};
var _URL = function(url){return(function(o,u,a,b,c,d){return(d=a?(function(_){return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))})(u.slice(a.index+1)):u,d==''&&(d=null),b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){return v}).forEach(function(v){(function(_){o[_[1]]=_[2]})(v.match(/(.+?)=(.*)/))})),{base:d,hash:c,param:o})})({},url,url.match(/\?|#.*?$/))};
console.log(
_URL('https://www.youtube.com/watch?v=BoZ0Zwab6Oc&t=56s#contents')
);
{
base: "https://www.youtube.com/watch",
hash: "contents",
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
console.log(
_URL('/watch?v=BoZ0Zwab6Oc&t=56s')
);
{
base: "/watch",
hash: null,
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
console.log(
_URL('?v=BoZ0Zwab6Oc&t=56s#')
);
{
base: null,
hash: "",
param: {
v: "BoZ0Zwab6Oc",
t: "56s"
}
}
Author And Source
この問題について((JSメモ)IE未対応のUrlSearchParamsの機能をpolyfillを使わずに補完するための関数), 我々は、より多くの情報をここで見つけました https://qiita.com/777_happ/items/e78ca3932883993ddf42著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .