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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

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

1回答

733閲覧

カスタムデータをJavaScriptで取得する方法

ginia3150

総合スコア2

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

jQuery

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/06/22 08:10

編集2021/06/22 08:15

前提・実現したいこと

今行いたいのはカスタムデータの値を取得することです。

発生している問題・エラーメッセージ

現状としてはnullが返ってきており表示としてはNANになってしまっています。

![https://gyazo.com/6a5fcd9b2c726345faee98f26677207d

該当のソースコード

html

1<div class="pulldown"> 2 3 <select class="mainselect" name="s1" id="s1"> 4 <option class="foods" selected="selected">--食材の種類--</option> 5 <%= render "foods" %> 6 </select> 7 8 9 10 <select name="s2" id="s2"> 11 <option class="foods">--食材選択--</option> 12 <option class="meat" id="">--肉類--</option> 13 <%= render "meat" %> 14 <option class="seafood" id="">--魚介類--</option> 15 <%= render "seafood" %> 16 <option class="egg" id="">--卵類--</option> 17 <%= render "egg" %> 18 <option class="beans">--豆類--</option> 19 <%= render "beans" %> 20 <option class="milk">--乳類--</option> 21 <%= render "milk" %> 22 <option class="grain">--穀類--</option> 23 <%= render "grain" %> 24 <option class="potato">--芋類及び澱粉類--</option> 25 <%= render "potato" %> 26 <option class="fruit">--果実類--</option> 27 <%= render "fruit" %> 28 <option class="nuts">--種実類--</option> 29 <%= render "nuts" %> 30 <option class="mushroom">--キノコ類--</option> 31 <%= render "mushroom" %> 32 <option class="alga">--藻類--</option> 33 <%= render "alga" %> 34 <option class="vegetable">--野菜類--</option> 35 <%= render "vegetable" %> 36 <option class="oils">--油脂類--</option> 37 <%= render "oils" %> 38 <option class="sugar">--砂糖及び甘味類--</option> 39 <%= render "sugar" %> 40 <option class="pastry">--菓子類--</option> 41 <%= render "pastry" %> 42 <option class="drink">--嗜好飲料類--</option> 43 <%= render "drink" %> 44 <option class="seasoning">--調味料及び香辛料類--</option> 45 <%= render "seasoning" %> 46 <option class="off-the-shelf">--調理済み流通食品類--</option> 47 <%= render "off-the-shelf" %> 48 </select> 49 50 51 <button type="button" class="btn-text" id="btn" value="取得">取得</button> 52 53 54 <script> 55 $(function(){ 56 //《selectタグ その①》路線を選択すると呼び出される関数 57 $('select[name="s1"]').change(function(){ 58 //《selectタグ その①》nameの値を取得 59 var line_class = $('select[name="s1"] option:selected').attr("class"); 60 console.log(line_class); 61 //《selectタグ その②》 子要素タグの個数を数え上げ 62 var count = $('select[name="s2"]').children().length; 63 console.log(count); 64 for(a=0; a<count; a++){ 65 var s2 = $('select[name="s2"] option:eq('+a+')'); 66     //《selectタグ その①》で選択した路線と等しいname値を持つoptionタグを表示 67 if(s2.attr("class") === line_class){ 68 s2.show(); 69 } else { 70 s2.hide(); 71 } 72 } 73     74 }); 75}); 76 </script> 77 78<script> 79window.addEventListener('DOMContentLoaded', ()=>{ 80 var protein = document.getElementById('s2').getAttribute('data-protein') 81 document.querySelector('#btn').addEventListener('click',()=>{ 82 console.log(protein) 83 view.innerHTML+=s2.value; 84 85 view.innerHTML+=s2.data-protein; 86 87 }); 88}); 89</script> 90</div>

######カスタムデータの状態

HTML

1<option value="あおさ 素干し" class="alga" data-protein="22.1" data-fat="" data-carb="" data-calorie="">あおさ 素干し</option>

試したこと

まずは一箇所の情報が取得できるかを試しました。
今回でいうと下記のコードの値を取得しようと思い

HTML

1data-protein="22.1"

JavaScriptに下記の二行の記述をしてみました。

javascript

1<script> 2 3 var protein = document.getElementById('s2').getAttribute('data-protein') 4 5 6 view.innerHTML+=s2.data-protein; 7 8 9</script>

nullということで定義は問題ないが中身がないということまではわかりました。
しかし良い解決手段がわかりませんでした。

補足

情報(FW/ツールのバージョンなど)
Ruby on Rails 6
jQuery 3.6.0

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

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

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

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

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

yambejp

2021/06/22 08:17

view.innerHTML+=s2.data-protein; s2.datakらproteinを引くという認識でよいですか?
ginia3150

2021/06/22 08:21

引くということではありません。 data-protein="22.1" と同じ記述にしていたのですが、これでは引くという意味になってしますのですね。
guest

回答1

0

view.innerHTML+=s2.data-protein; ↓↓↓ view.innerHTML+=protein;

では?

投稿2021/06/22 08:26

yambejp

総合スコア115010

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

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

ginia3150

2021/06/22 08:33

回答ありがとうございます。 この記述で実行してみたところnullが返ってきてしまいましたので 空であると返ってきました。 ということは var protein = document.getElementById('s2').getAttribute('data-protein') こちらの記述に問題があるのでしょうか?
yambejp

2021/06/22 08:38

var protein = document.getElementById('s2').getAttribute('data-protein') のあとに console.log(protein) で確認してみるところからでしょう
ginia3150

2021/06/22 08:44

ご指摘ありがとうございます。 確認したところこのタイミングで既にnullのlogが返ってきていました。
yambejp

2021/06/22 09:04

s2はselect自身でdata-proteinはoptionなら参照方法が違いますね もう少し整理されたほうがよいでしょう
ginia3150

2021/06/22 10:53

返答ありがとうございます。 正直に申し上げて、 「data-proteinはoptionなら参照方法が違いますね もう少し整理されたほうがよいでしょう」 それが理解できていれば質問していません。 つまりoptioを参照するようの記述方法があるとおっしゃりたいんですよね? 整理というのは具体的に何を整理するのでしょうか? 考え方でしょうか?記述方法でしょうか? 初心者なりに調べてこの程度なのです。 回答していただけるだけありがたいことですが参考になるページ等があれば教えていただいてもよろしいでしょうか?
yambejp

2021/06/23 00:19

selectにはdata-proteinはありませんし そのoptionを見る限りdata-proteinがみあたりません ただ唐突に「カスタムデータの状態」としてdata-proteinの提示があります 回答者の想像力で補完してもなかなか回答が難しいので 質問内容を整理してほしいということです
yambejp

2021/06/23 00:22

エスパー回答 <script> window.addEventListener('DOMContentLoaded', ()=>{ document.querySelectorAll('#s2 option[data-protein]').forEach(x=>{ view.innerHTML+=x.dataset.protein+"<br>"; }); }); </script> <select id="s2"> <option value="a" data-protein="100">a</option> <option value="b" data-protein="200">b</option> <option value="c" data-protein="300">c</option> <option value="d" data-protein="400">d</option> </select> <div id="view"></div>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問