Chromeやスマホのブラウザではまだ実装されてないみたいなので自作してみた。
if (!window.URLSearchParams) {
(function(){
var URLSearchParams = function(search) {
this.params = [];
if (search instanceof URLSearchParams) {
this.params = search.params;
return;
}
var pairs = search.split("&");
var len = pairs.length;
for (var i = 0; i < len; i++) {
var pair = pairs[i].split("=");
pair.push(null);
this.append(pair[0], pair[1]);
}
};
var p = URLSearchParams.prototype;
function search(name) {
this.params.forEach(function(element, index) {
if (element.name === name) return index;
});
return false;
}
p.append = function(name, value) {
this.params.push({
name: name,
value: value,
});
};
p.delete = function(name) {
while (true) {
var index = search.call(this, name);
if (index === false) {
break;
}
this.params.splice(index, 1);
}
};
p.get = function(name) {
var index = search.call(this, name);
return this.params[index].name;
};
p.set = function(name, value) {
var index = search.call(this, name);
if (index === false) {
this.append(name, value);
} else {
this.params[index] = {
name: name,
value: value,
};
}
};
p.getAll = function() {
var values = [];
this.params.forEach(function(element) {
values.push(element.value);
});
return values;
};
p.has = function(name) {
return search.call(this, name) !== false;
};
p.toString = function() {
var pairs = [];
this.params.forEach(function(element) {
pairs.push(element.name + '=' + element.value);
});
return pairs.join('&');
};
window.URLSearchParams = URLSearchParams;
})();
}
Firefoxでの動作を参考に実装。だいたい合ってると思ふ。。。
間違いとかあったら教えて下さいな。
本当はURL
と連動させたかったけど、search
プロパティがconfigurable:false
だったので断念しました。
2016/05/02 修正
コンストラクタのsearchに?
から始まる正規表現パターンを検索していたのは間違いだったようなので削除。
コメント