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

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

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

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

jQuery

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

Q&A

解決済

1回答

412閲覧

jqueryを使用して、selectと文字列とを判定し何らかの処理を加えたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/11/22 04:46

###前提・実現したいこと
以下のようなことを実現したいのですが、どのように書けば良いのかわかりません。

例:
selectで「A店」を選択時に、「りんご」と「いちご」に対して何らかの処理を加えたい。
selectで「C店」を選択時に、「チョコ」と「とうふ」に対して(以下略)
selectで「D店」を選択時に、「いちご」と「りんご」に対して(以下略)

###該当のソースコード

html

1<!--ショップ名--> 2<select name="select01" id="select01"> 3 <option value="0">A店</option> 4 <option value="1">B店</option> 5 <option value="2">C店</option> 6 <option value="3">D店</option> 7</select> 8 9<!--商品名--> 10<div id="section01"> 11 <p>りんご</p> 12 <p>バナナ</p> 13 <p>いちご</p> 14 <p>パイン</p> 15 <p>ざくろ</p> 16 <p>チョコ</p> 17 <p>とうふ</p> 18</div>

###現状のソースコード
※以下のソースコードは未完成のものです。

以下の通りでなくとも構いませんが、
できればJSに詳しくない方でも編集できるような仕組みにしたいと思っています。

たとえばですが、現在itemsに「いちご」「ざくろ」「とうふ」とありますが、これらを「いちご(A店・C店)」「ざくろ(B店)」「とうふ(A店・D店)」といったようなものでif文の判定できればと思っています。

javascript

1//商品名を入力(この箇所はJSに詳しくない方でも編集できるようにしたい) 2var itemSelecter = { 3 init: function(){ 4 var items = 5 'いちご|ざくろ|とうふ'; 6 return items; 7 }, 8}; 9 10//セレクトを変更した時の処理 11var outOfStock = { 12 selector: '#section01 p', 13 init: function(){ 14 var $element = $(this.selector); 15 $($element).each(function () { 16 var $this = $(this); 17 var itemName = $this.text(); 18 //select変更時の処理 19 $('#select01').change(function() { 20 var selectTxt = $('#select01 option:selected').text(); 21 22 if (itemName.match(itemSelecter.init())) { 23 console.log('なんらかの処理'); 24 } 25 }); 26 27 }); 28 }, 29}; 30outOfStock.init();

以上、何卒よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じです

CSS

1.active{background-Color:red;}

javascript

1$(function(){ 2 $('#select01').on('change',function(){ 3 var list={0:"りんご|いちご",1:"ざくろ",2:"チョコ|とうふ",3:"いちご|りんご"}; 4 var reg=new RegExp("^("+list[$(this).val()]+")$"); 5 $('#section01 p').removeClass('active').filter(function(){ 6 return $(this).text().match(reg); 7 }).addClass('active'); 8 }).trigger('change'); 9}); 10

HTML

1<select name="select01" id="select01"> 2 <option value="0">A店</option> 3 <option value="1">B店</option> 4 <option value="2">C店</option> 5 <option value="3">D店</option> 6</select> 7<div id="section01"> 8 <p>りんご</p> 9 <p>バナナ</p> 10 <p>いちご</p> 11 <p>パイン</p> 12 <p>ざくろ</p> 13 <p>チョコ</p> 14 <p>とうふ</p> 15</div>

追記

optionのテキストベースで処理

javascript

1$(function(){ 2 $('#select01').on('change',function(){ 3 var list={"A店":"りんご|いちご","B店":"ざくろ","C店":"チョコ|とうふ","D店":"いちご|りんご"}; 4 var reg=new RegExp("^("+list[$(this).find('option:selected').text()]+")$"); 5 $('#section01 p').removeClass('active').filter(function(){ 6 return $(this).text().match(reg); 7 }).addClass('active'); 8 }).trigger('change'); 9}); 10

投稿2017/11/22 05:26

編集2017/11/22 07:47
yambejp

総合スコア114767

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 07:40

ご回答いただきありがとうございます。 このような方法があるとは思いつきませんでした。 ちなみにご指摘のコードでは<option>のvalue値を参照しているかと思いますが、そうではなく「A店」「B店」・・・といったテキストを使用することは可能でしょうか? また「なんらかの処理」部分が今回、activeというclassの付け外しでご説明いただいておりますが、もう少し複雑な処理をしたい場合もfilterで実現できるものなのでしょうか?たとえば以下のhoge01を削除し、かつhoge02のテキストを「成功」に変更し、かつその文字色を赤色(red)にする・・・など。 <p>りんご<span class="hoge01">01</span><span class="hoge02">02</span></p> こちらの説明不足ではございましたが、何卒ご教示よろしくお願いいたします。
yambejp

2017/11/22 07:49

optionのテキストベースで処理する方法を追記しておきました ちなみに削除は辞めたほうがいいような気がします せめて表示を消すとか・・・ テキストを変更する場合、別のselectが選ばれたときどうしたいのかによります 詳しい仕様を書いてもらえば対応できるかもしれません
退会済みユーザー

退会済みユーザー

2017/11/22 09:54

度々のご回答、本当にありがとうございます。 そうですね・・削除ではなく非表示(hide)ですね。 実際に想定しているコードは、本ページ記載のコードよりもHTML部分が複雑のためここでは簡素化いたしておりますが、実際に行いたい処理はoptionのテキスト群と「りんご」「バナナ」などが一致した時、(ここでは<p>に子要素はありませんが)<p>の子要素の、とある兄弟要素を非表示(hide)にしたり、また別の兄弟要素の中身を変更したり(text)できればと思っております。
yambejp

2017/11/22 10:45 編集

いずれにしろclassで処理できるものはなるべくその範囲で調整するとよいでしょう テキストの書き換えなどはページの構成から考えるとあまり好ましくありません inputなどvalueを変えられるもので調整すればインタラクティブな処理も 整合性がとれると思います。 とはいえ、上記内容程度であればなんでもできると思います。 要求定義をまとめて仕様設計をつめてみるといいでしょう
退会済みユーザー

退会済みユーザー

2017/11/24 07:05

ご指摘ありがとうございます。お教え頂いたコードを参考に要望を実現することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問