teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2020/03/20 11:58

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -32,4 +32,6 @@
32
32
  ```
33
33
  注意点は
34
34
  1. input[type=checkbox]のような keyが重複されるケースには対応していません
35
- 2. デバッグしてません
35
+ 2. デバッグしてません
36
+
37
+ ご質問にある ``hoge.com?test`` のような ``=`` がないパターンにも対応していませんが、それぞれの for ループ内を弄れば対応できるのではないでしょうか。

1

追記

2020/03/20 11:58

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -2,4 +2,34 @@
2
2
 
3
3
  IE 以外で良いなら ``location.query``を処理できそうですよ。
4
4
 
5
- MDN [URLSearchParams](https://developer.mozilla.org/ja/docs/Web/API/URLSearchParams)
5
+ MDN [URLSearchParams](https://developer.mozilla.org/ja/docs/Web/API/URLSearchParams)
6
+
7
+ ----
8
+ IEでは 文字列 オブジェクトの相互変換を考える必要があります。
9
+
10
+ ``?param=value&param2=value2&...`` のようなフォーマットは
11
+ ``paramN``, ``valueN`` 部分が URL 用にエンコードされているものとして考える。
12
+
13
+ コードスニペットは次のような感じでしょうか。
14
+ ```javascript
15
+ function parseQueryString ( qs ) {
16
+ var rslt = {};
17
+ var pairs = qs.substring(1).split("&");
18
+ for( var i=0,l=pairs.length; i<l; ++i ) {
19
+ pair = pairs[i].split("=");
20
+ rslt[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
21
+ }
22
+ return rslt
23
+ }
24
+
25
+ function stringifyQueryString ( oj ) {
26
+ var rslt = [];
27
+ for( var key in oj ) {
28
+ rslt.push( encodeURIComponent(key) + "=" + encodeURIComponent(oj[key]) );
29
+ }
30
+ return "?" + (rslt.join("&"));
31
+ }
32
+ ```
33
+ 注意点は
34
+ 1. input[type=checkbox]のような keyが重複されるケースには対応していません
35
+ 2. デバッグしてません