• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数の<option>と一致するものを表示するには)

複数のoptionと一致するものを表示するには

このQ&Aのポイント
  • 複数の<option>と一致するものだけを表示させたい方法について質問しています。現在、特定の<select>要素の選択肢と、<div>要素の一致するものを表示させるためのコードを作成していますが、うまくいっていません。詳細な解決策やヒントを教えてください。
  • 質問者は、<select>要素の複数の選択肢と、<div>要素の一致するものを表示させるためのコードを作成していますが、うまくいっていません。具体的には、最初の2つの<select>要素の処理が行われず、最後の<select>要素のみが処理されてしまうとのことです。解決策やヒントを教えてください。
  • <select>要素の選択肢と、<div>要素の一致するものを表示させるためのコードを作成していますが、うまくいっていません。具体的には、最初の2つの<select>要素の処理が行われず、最後の<select>要素のみが処理されてしまうとのことです。解決策やヒントを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じかなぁ・・・ <style> #mainBox {width:300px;border: 3px solid black;padding: 10px;} div.sample_in {width: 250px;border: 1px solid SteelBlue;padding: 10px;margin: 20px;} div.sample_in dt {color: Magenta;} </style> <script> function test0(f) { var div1 = document.getElementById('sample'); var div2 = div1.getElementsByTagName('div'); var str1 = f.elements["select1"].options[f.elements["select1"].selectedIndex].value; var str2 = f.elements["select2"].options[f.elements["select2"].selectedIndex].value; var str3 = f.elements["select3"].options[f.elements["select3"].selectedIndex].value; for(var i=0; i<div2.length; i++){ var dd = div2[i].getElementsByTagName("dd"); if( (dd[0].textContent==str1 || str1=='指定なし') && (dd[1].textContent==str2 || str2=='指定なし') && (dd[2].textContent==str3 || str3=='指定なし') ){ div2[i].style.display = ''; }else{ div2[i].style.display = 'none'; } } } </script> <form> <select name="select1"> <option value="指定なし" selected>指定なし</option> <option value="1組">1組</option> <option value="2組">2組</option> <option value="3組">3組</option> </select> <select name="select2"> <option value="指定なし" selected>指定なし</option> <option value="男子">男子</option> <option value="女子">女子</option> </select> <select name="select3"> <option value="指定なし" selected>指定なし</option> <option value="おとなしい">おとなしい</option> <option value="活発">活発</option> <option value="普通">普通</option> </select> <input type="button" value="OK" onclick="test0(this.form)"> </form> <div id="sample"> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>おとなしい</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>普通</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>おとなしい</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>活発</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>活発</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>普通</dd></dl> </div> </div>

tekkenman7
質問者

お礼

難しく考えすぎていました。 凄く参考になりました。有難うございます。 何も一致しなかった場合は文章をinnerHTMLで表示させるように少し改良してみました。動作するたびにinnerHTML=""にするところが強引でしょうか。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>サンプル2</title> <style type="text/css"> #mainBox { width: 300px; border: 3px solid black; padding: 10px; } .sample_in { width: 250px; border: 1px solid SteelBlue; padding: 10px; margin: 20px; } .sample_in dt { color: Magenta; } </style> </head> <body> <form action="#"> <select name="select1"> <option value="指定なし" selected="selected">指定なし</option> <option value="1組">1組</option> <option value="2組">2組</option> <option value="3組">3組</option> </select> <select name="select2"> <option value="指定なし" selected="selected">指定なし</option> <option value="男子">男子</option> <option value="女子">女子</option> </select> <select name="select3"> <option value="指定なし" selected="selected">指定なし</option> <option value="おとなしい">おとなしい</option> <option value="活発">活発</option> <option value="普通">普通</option> </select> <input type="button" value="OK" onclick="testALL(this.form)" /> </form> <div id="sample"> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>おとなしい</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>普通</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>おとなしい</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>女子</dd></dl> <dl><dt>性格</dt><dd>活発</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>2組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>活発</dd></dl> </div> <div class="sample_in"> <dl><dt>組名</dt><dd>1組</dd></dl> <dl><dt>性別</dt><dd>男子</dd></dl> <dl><dt>性格</dt><dd>普通</dd></dl> </div> <p id="nono">&nbsp;</p> </div> <script type="text/javascript"> function testALL(f) { var div1 = document.getElementById('sample'); var div2 = div1.getElementsByTagName('div'); var str1 = f.elements["select1"].options[f.elements["select1"].selectedIndex].value; var str2 = f.elements["select2"].options[f.elements["select2"].selectedIndex].value; var str3 = f.elements["select3"].options[f.elements["select3"].selectedIndex].value; var nones = "指定なし"; var count = 0; var innerttt = "ごめんなさい<br />該当無し"; document.getElementById('nono').innerHTML = ""; for(var i=0; i<div2.length; i++){ var dd = div2[i].getElementsByTagName("dd"); if( (dd[0].textContent==str1 || dd[0].innerText==str1 || str1==nones) && (dd[1].textContent==str2 || dd[1].innerText==str2 || str2==nones) && (dd[2].textContent==str3 || dd[2].innerText==str3 || str3==nones) ){ div2[i].style.display = ''; }else{ div2[i].style.display = 'none'; count++; } } if( count == div2.length ){ document.getElementById('nono').innerHTML = innerttt; } } </script> </body> </html>

すると、全ての回答が全文表示されます。

関連するQ&A