質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

4371閲覧

URLパラメータの値を、 switch文で条件分岐させたい

SHO1128

総合スコア91

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/12/13 09:40

【やりたいこと】
Webサイト構築につきましてのご質問です。
あらかじめ設定したURLパラメータの値を
switch文で条件分岐させたいのです。

パラメータ設定が
…/?category=tokyo …の場合 webページ上に「東京です。」 

パラメータ設定が
…/?category=apple …の場合 webページ上に「リンゴです。」

…と、ページ上で文字列の表記を
以下の実装によって再現したいのです。 

【実装例】

例:パラメータの値を【apple】と【tokyo】の2つに設定した場合。
https://teratail.com/?category=apple&category=tokyo

(1)
//現在のURLパラメータを取得
var urlParam = location.search.substring(1);

// URLにパラメータが存在する場合
if(urlParam) {
// 「&」が含まれている場合は「&」で分割
var param = urlParam.split('&');

// パラメータを格納する用の配列を用意
var paramArray = [];

// 用意した配列にパラメータを格納
for (i = 0; i < param.length; i++) {
var paramItem = param[i].split('=');
paramArray[paramItem[0]] = paramItem[1];
}
alert(paramItem[1]);
}

(2)
ここまで設定するとアラート表示(alert(paramItem[1]);)で
「apple」、「tokyo」がそれぞれ格納されることが確認できます。

そこでswitch文で分岐させていきます…。

// 格納したパラメータの値を取得
var test = (paramItem[1]);

switch (test)
{
case "apple":
$('#test').html('リンゴです');
break;

case "tokyo": $('#test2').html('東京です'); break;

}

変数"test" と case "apple" が等しいので、
testタグに「リンゴです」と表示されます。

【問題点】
しかし、#test2タグには「東京です」と
同時に表記ができませんでした。

…ここで問題なのですが、
パラメータの値が、【リンゴ】かつ【東京】の
場合、switch文で条件分岐・表示させる式を
どうぞご教授お願い致します。。

ちなみに実装の参考にしたサイトはこちらです。
■JavaScriptでURLのパラメータやアンカーを判断して処理を変更する方法
https://www.tam-tam.co.jp/tipsnote/javascript/post9911.html

以上です。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/13 10:10

コードはマークダウンのcode機能をご利用ください
m.ts10806

2018/12/13 10:12

ちなみに同名パラメータを渡す場合[]をつけて配列にするのがパラメータの通例です。
guest

回答2

0

ベストアンサー

switchじゃなく、ifにしたらいいのでは?

js

1// 現在のURLパラメータを配列で取得 2// 何もパラメーター無しの時はnull 3const urlParamList = location.search.substring(1) !== "" ? location.search.substring(1).split("&") : null 4 5// パラメーターリストが存在する場合 6if (urlParamList != null) { 7 const paramArray = urlParamList.map(val => val.split("=")[1]) 8 console.log(paramArray) 9 10 if (paramArray.includes("apple")) { 11 $("#test1").html("リンゴです") 12 } 13 if (paramArray.includes("tokyo")) { 14 $("#test2").html("東京です") 15 } 16}

投稿2018/12/13 10:29

編集2018/12/13 10:30
shou6

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHO1128

2018/12/14 01:05

shou6様 ご回答、ありがとうございました。 感謝申し上げます。 実装してみたところ、 大変メンテナンス性が高そうなので、 ベストアンサーとさせていただきました。 是非、使わせていただきます。 この度は、ご教授ありがとうございました。 今後とも どうぞよろしくお願いいたします。
guest

0

switchということなんで。

javascript

1const urlParam = "category=apple&category=tokyo"; 2const paramArray = urlParam.split("&").map(e=>e.split("=")[1]); 3 4switch(true) { 5 case paramArray.includes("apple"): 6 console.log("りんご"); 7 case paramArray.includes("tokyo"): 8 console.log("東京"); 9}

consoleみていただくと、両方出力されると思います。

投稿2018/12/13 12:57

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHO1128

2018/12/14 01:04

papinianus様 ご回答ありがとうございます。 switch(true) という使い方を勉強させていただきました。 是非、今後の参考にさせていただきます。 ありがとうございました。 しかし、switch制御すると言った手前、 やはりif文で制御することにいたしました。 勝手ながら申し訳ありません。 今後とも どうぞよろしくお願いいたします。
papinianus

2018/12/14 01:21

switch(true)は賛否ありますし、特にコーディング規約とか、こうしたいというポリシーがなければ使わないほうがいいと思います。 さらに、この例では、フォールスルーもしていますので、良くないです。 私がメンテナンスしているコードにこういうのがでてきたら、ifに書き直すと思います。
SHO1128

2018/12/14 04:10

papinianus様 ご返信ありがとうございます。 > switch(true)は賛否ありますし、 今後の参考にさせていただきます。 またこの度は、switch文での実装…という質問とは 異なる回答・解決を出してしまい、 大変失礼いたしました。 今後とも どうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問