こんばんは
自分用のスクリプト(Chrome/Firefox)として、<select>要素の中から、特定の<option>のみを表示させて、ほかを非表示にするものを作ろうとしています。
<select id="taisyou">
<option value="1">apple</option>
<option value="2">orange</option>
<option value="3">banana</option>
<option value="4">peach</option>
</select>
このようなselect要素があり、valueが1と3のもののみを表示して、それ以外を非表示にしたいのですが、どのようにすればよいのかわかりません。スクリプトは画面の読み込み後に自動で実行するように仕掛けています。
document.getElementById("taisyou").style.display="none";
こうすればselect全体を非表示にできます。optionにはIDが降られていません。select全体を何かしらの方法で渡して、optionをループさせてvalueの値が 1 か 3 以外であれば display=noneにするというロジックになるのだと思うのですが、書き方がわかりません。
IEではおそらく正しく表示されないのかもしれませんが、自分用として特定のブラウザで使うのでそのあたりは大丈夫だと思います。どのように書いていけば実現できるか、お知恵とアドバイスをお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
選択肢を取っ替え引っ替えする場合
<form name=selector>
<select name=v>
<option value=1> Alpha
<option value=2> Brabo
<option value=3> Charlie
<option value=4> Delta
</select>
<button name=z value='1,2,3,4'>Full</button>
<button name=z value='1,3'>A/C</button>
<button name=z value='2,4'>B/D</button>
</form>
<script>
window.addEventListener('DOMContentLoaded', function(){
_ function handler(ev) {
_ _ ev.preventDefault();
_ _ var button = ev.target, vals = button.value.split(',');
_ _ var sel = button.form.elements['v'], opts = sel.options;
_ _ var indexS = sel.selectedIndex, indexN = -1;
_ _ if (indexS >= 0) sel.dataset.originalIndex = indexS;
_ _ var indexO = parseInt(sel.dataset.originalIndex);
_ _ for (var i = 0, o; o = opts[i]; i++) {
_ _ _ if (vals.filter(function(x){return x == o.value}).length > 0) {
_ _ _ _ o.style.display = '';
_ _ _ _ o.removeAttribute('disabled');
_ _ _ _ if (i == indexS || i == indexO && indexN < 0) indexN = i;
_ _ _ } else {
_ _ _ _ o.style.display = 'none'; // IE11 miss
_ _ _ _ o.setAttribute('disabled', 'disabled');
_ _ _ }
_ _ }
_ _ sel.selectedIndex = indexN;
_ }
_ Array.prototype.slice.apply(document.forms['selector'].elements['z']).forEach(function(e){
_ _ e.addEventListener('click', handler, false);
_ });
}, false);
</script>
No.2
- 回答日時:
optionのlengthを裏から回すならデクリメントしないとね
<script>
function hideoption(){
var sel=document.getElementById("taisyou");
var opts=sel.getElementsByTagName("option");
for(var i=opts.length-1; i>=0; i--){
if(opts[i].value!="1"&&opts[i].value!="3"){
sel.removeChild(opts[i]);
}
}
}
</script>
<select id="taisyou">
<option value="1">apple</option>
<option value="2">orange</option>
<option value="3">banana</option>
<option value="4">peach</option>
</select>
<input type="button" onclick="hideoption()" value="hide">
あ!
さすが!そうですね。偶然私のケースではdisplay=noneを使ったからかインクリメントで問題ありませんでしたけど、removeしてしまうとインデックスがずれてしまって望む結果が得られないかもしれませんね。forループといえば++で書いてしまいがちですが、デクリメントの選択肢は自然に出てきませんでした。
No.1
- 回答日時:
テストしてませんが、こんな感じで。
var sel=document.getElementById("taisyou");
var opts=sel.getElementsByTagName("option");
for(var i=opts.length-1; i>=0; i++){
if(opts[i].value!="1"&&opts[i].value!="3"){
sel.removeChild(opts[i]);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セレクトボックスで配列を呼び...
-
selectのすべての値を送信する方法
-
プルダウンのoptionの表示・非...
-
selectを変更不可にしたい
-
プルダウンメニューに連動する...
-
サイト内の物件を複数の検索条...
-
HTML内の指定の位置にプルダウ...
-
全てのselect要素をデフォルト...
-
アンケートフォームを作成する...
-
選択肢変更型セレクトボックス...
-
javascriptでoptionタグを削除...
-
チェックボックス、セレクトボ...
-
連想配列からセレクトボックス...
-
javascriptで、変数で、ディレ...
-
javascriptでセレクトボックス...
-
「年」「月」二つのドロップダ...
-
<input>の選択肢をプルダウンメ...
-
java scriptでセレクトの入力チ...
-
onchangeイベントを強制的に発...
-
Googleモバイル検索の検索結果...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
selectを変更不可にしたい
-
javascriptでセレクトボックス...
-
全てのselect要素をデフォルト...
-
Selectボックスの一覧表示方法
-
リストボックス内の重複したも...
-
プルダウンの値によって活性・...
-
VBScriptでHTMLのセレクトボッ...
-
JavaScriptで<select>の<option...
-
セレクトボックスで配列を呼び...
-
ラジオボタンとプルダウンを連...
-
selectを使った計算
-
select要素のvalueを配列で取得...
-
<input>の選択肢をプルダウンメ...
-
javascriptでoptionタグを削除...
-
今日の日付を自動的にセレクト...
-
検索窓とプルダウンメニュー機...
-
【javascript】連想配列からセ...
-
selectボックスの選択結果を変...
-
同じ名前のセレクトがある場合...
おすすめ情報
よく見たら、1でもないし3でもないので&&で良さそうですね。
どこでこけているのか、firefoxでデバッグできるらしいので見てっます。
解決しました
普通の比較演算は == で
ループの方法も
i=o;i<opt.length;
でした。
ありがとうございます。