![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.1ベストアンサー
- 回答日時:
削除ではなく、displayプロパティで表示/非表示を切り替えてみてはどうでしょう?
<form id="Test1" action="test.html">
<p>
<select name="foo">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
<option value="d">D</option>
</select>
</p>
<p><input type="button" name="a" value="A"></p>
</form>
<script type="text/javascript">
document./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'click', function (event) {
var target = event.target || event.srcElement;
if(target.nodeName != 'INPUT' || target.form.id != 'Test1' || target.name != 'a'){ return false; }
console.log(target);
var select = target.form.foo;
console.log(select);
var i = (select.selectedIndex + 1) % 4;
select.options[i].style.display ? select.options[i].style.display = '' : select.options[i].style.display = 'none';
},false);
</script>
No.3
- 回答日時:
#1です。
#2のコメントより引用。
> style.display:none だと消えてくれないブラウザがあるみたいなので(Opera10、IE6など)
おおおおお…、IE6はともかくOpera10でも消えないとは!
しかし、私は諦めなかった…。
<form id="Test1" action="test.html">
<p>
<select name="foo">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
<option value="d">D</option>
</select>
</p>
<p><input type="button" name="a" value="A表示をトグル"></p>
</form>
<script type="text/javascript">
document./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'click', function (event) {
var target = event.target || event.srcElement;
if(target.nodeName != 'INPUT' || target.form.id != 'Test1' || target.name != 'a'){ return false; }
var select = target.form.foo;
var i = 0;
if(select.selectedIndex == i && select.value == 'a'){
select.selectedIndex = (i + 1) % select.length;
}
if(select.options[i].value == 'a'){
select.replaceChild(document.createComment(select.options[0].value + ',' + select.options[0].firstChild.nodeValue), select.options[0]);
} else {
for(var j=0,childs=select.childNodes,l=childs.length,option,comment; j<l; j++){
if(childs[j].nodeType == 8){
console.log(childs[j].nodeValue);
option = document.createElement('option');
comment = childs[j].nodeValue.split(',');
option.value = comment[0];
option.appendChild(document.createTextNode(comment[1]));
select.replaceChild(option, childs[j]);
}
}
}
},false);
</script>
document.createComment - MDC
https://developer.mozilla.org/en/DOM/document.cr …
この回答への補足
ご回答ありがとうございます。
ieとffで動作検証してみたのですが、aトグルボタンを押すと
aの要素は消えるのですが、もう一度押すと
エラーで停止してしまいました。
No.2
- 回答日時:
No1様の回答のほうがスマートな気がしますが、style.display:none だと消えてくれないブラウザがあるみたいなので(Opera10、IE6など)、ご質問の通りに削除、復旧する例。
>削除する前の状態に戻す方法
の意味がよくわからないけれど、初期状態という意味と解釈すると最初の状態を保持しておかないとならない。
cloneNodeでザックリ保持しておくのが復旧も含めて簡単だと思いますが、Optionを追加したりの例示のために変数に記録する方法にしています。
基本的に、新しくoptionを作成するのはnew Option()で、(CreateElementなどでも可能)
削除するのは removeChilde() か直接 options.lengthを指定するなど。
以下あたりをご参考に
http://1106.suac.net/johoB/JavaScript/jscripto.h …
http://javascriptist.net/docs/pract_dom_removech …
<サンプル>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>test</title></head>
<body>
<select id="target" size="6">
<option value="A">AAA</option>
<option value="B">BBB</option>
<option value="C" selected>CCC</option>
<option value="D">DDD</option>
<option value="E">EEE</option>
</select>
<input type="button" value="削除" onclick="deleteOption()">
<input type="button" value="復帰" onclick="restoreOption()">
<script type="text/javascript">
<!--
// 初期状態を記録(グローバル変数)
var list = [], sel = document.getElementById('target');
var o, i = -1;
while (o = sel.options[++i]) {
list[i] = [o.text, o.value];
if (o.selected) list[i][2] = true;
}
// 選択項目を削除
function deleteOption() {
var o, i = sel.options.length, f = true;
while (o = sel.options[--i]) {
if (o.selected) { sel.removeChild(o); f=!f; } else o.selected = false;
//セレクト表示(反転)だけ残るブラウザがあるので全部消してる(↑)
}
if (f) alert("select item !!");
}
// 初期状態に戻す
function restoreOption() {
sel.options.length = 0;
for (var i =0; i<list.length; i++) {
sel.options[i] = new Option(list[i][0], list[i][1]);
if (list[i][2]) sel.options[i].selected = true;
}
}
//-->
</script>
</body>
</html>
グローバル変数やonclickなどを利用しているので、そのへんは適当に修正してください。
この回答への補足
ご回答ありがとうございます。
ieとffで動作検証させていただきました。
削除ボタンで消える事は消えるのですが、
ieでエラーで停止してしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- その他(コンピューター・テクノロジー) パソコンやスマートフォンのデータを完全に削除する方法は? 3 2022/09/09 20:46
- iPhone(アイフォーン) 以前使っていたSIMカード抜いた状態のiPhoneの 写真アプリの中のデータを一括削除して 『最近削 2 2022/05/20 03:00
- VPN VPN Client Adapter を削除する方法を教えて下さい。 1 2023/08/20 01:49
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/10/03 09:55
- Outlook(アウトルック) すべての新着メールが「受診フォルダ」に入らない。 2 2023/02/24 20:28
- メルカリ メルカリでの下着の出品について 3 2023/07/30 16:27
- LINE LINE機能の"削除"について、した側とされた側に起こることを教えてください LINEのトーク一覧か 2 2023/04/13 08:24
- Windows 10 パソコン使っていたら下記の表示されたのですが、意味を教えてください。 3 2023/02/15 17:49
- LINE スマホ(アンドロイド)ライントーク削除でPC版削除ができない 3 2023/01/26 07:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
javascriptでセレクトボックス...
-
VBScriptでHTMLのセレクトボッ...
-
【javascript】連想配列からセ...
-
select要素のvalueを配列で取得...
-
selectが変更されたらnameを指...
-
セレクトボックスを2つ選択して...
-
連想配列からセレクトボックス...
-
<input>の選択肢をプルダウンメ...
-
ラジオボタンとプルダウンを連...
-
ラジオボタンの選択に応じてプ...
-
addclassがうまく働きません
-
selectを変更不可にしたい
-
同じ名前のセレクトがある場合...
-
JavaScriptで<select>の<option...
-
プルダウンで選択した項目にあ...
-
プルダウンの値によって活性・...
-
selectの初期値を設定したい
-
まったく同じ<select>フォーム...
-
セレクトボックスを使用した、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセレクトボックス...
-
selectを変更不可にしたい
-
全てのselect要素をデフォルト...
-
<input>の選択肢をプルダウンメ...
-
Selectボックスの一覧表示方法
-
プルダウン選択を変更すると、...
-
セレクトボックスで配列を呼び...
-
JavaScriptで<select>の<option...
-
プルダウンのoptionの表示・非...
-
select要素のvalueを配列で取得...
-
【javascript】連想配列からセ...
-
ラジオボタンとプルダウンを連...
-
同じ名前のセレクトがある場合...
-
selectボックスの選択結果を変...
-
プルダウンの値によって活性・...
-
javascriptで合計金額を算出し...
-
プルダウンメニューに連動する...
-
リストボックス内の重複したも...
-
VBScriptでHTMLのセレクトボッ...
-
連想配列を使ってコンボボック...
おすすめ情報