前提・実現したいこと
今行いたいのはカスタムデータの値を取得することです。
発生している問題・エラーメッセージ
現状としてはnullが返ってきており表示としてはNANになってしまっています。
該当のソースコード
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