私はページに以下を持っています
<select name="val" size="1" >
<option value="A">Apple</option>
<option value="C">Cars</option>
<option value="H">Honda</option>
<option value="F">Fiat</option>
<option value="I">Indigo</option>
</select>
特定の条件が当てはまる場合、選択から特定の値を削除したいと思います。
例えば
if(frm.product.value=="F"){
// remove Apple and Cars from the select list
}
Javascriptを使用してこれを行うにはどうすればよいですか
SelectオブジェクトのIDを次のように指定します。
<select id="mySelect" name="val" size="1" >
<option value="A">Apple</option>
<option value="C">Cars</option>
<option value="H">Honda</option>
<option value="F">Fiat</option>
<option value="I">Indigo</option>
</select>
あなたは純粋なJavaScriptでそれを行うことができます:
var selectobject = document.getElementById("mySelect");
for (var i=0; i<selectobject.length; i++) {
if (selectobject.options[i].value == 'A')
selectobject.remove(i);
}
しかし、他の答えが示唆するように、jQueryまたは他のJSライブラリを使用する方がはるかに簡単です。
JQueryソリューションを確認してください こちら
$("#selectBox option[value='option1']").remove();
純粋なjavascriptを使用
var condition = true; // your condition
if(condition) {
var theSelect = document.getElementById('val');
var options = theSelect.getElementsByTagName('OPTION');
for(var i=0; i<options.length; i++) {
if(options[i].innerHTML == 'Apple' || options[i].innerHTML == 'Cars') {
theSelect.removeChild(options[i]);
i--; // options have now less element, then decrease i
}
}
}
IEでテストされていない(誰かがそれを確認できる場合)...)
既に述べたように、オプションを削除すると、選択要素の長さが短くなります。 1つのオプションを削除するだけの場合、これは問題ではありませんが、いくつかのオプションを削除する場合は問題が発生する可能性があります。一部の人は、オプションを削除するときにインデックスを手動で減らすことを提案しました。私の意見では、forループ内でインデックスを手動で減らすことは良い考えではありません。これが、背後からすべてのオプションを反復処理するforループとは少し異なることを提案する理由です。
var selectElement = document.getElementById("selectId");
for (var i = selectElement.length - 1; i >= 0; i--){
if (someCondition) {
selectElement.remove(i);
}
}
すべてのオプションを削除したい場合は、このようなことをすることができます。
var selectElement = document.getElementById("selectId");
while (selectElement.length > 0) {
selectElement.remove(0);
}
インデックスIは、最初の要素が削除されるとすぐに変更されます。このコードは、wifiチャネルコンボボックスから値52〜140を削除します
obj = document.getElementById("id");
if (obj)
{
var l = obj.length;
for (var i=0; i < l; i++)
{
var channel = obj.options[i].value;
if ( channel >= 52 && channel <= 140 )
{
obj.remove(i);
i--;//after remove the length will decrease by 1
}
}
}
JQueryを使用している場合、次のようになります。
SELECTにIDを与える
<select name="val" size="1" id="val">
<option value="A">Apple</option>
<option value="C">Cars</option>
<option value="H">Honda</option>
<option value="F">Fiat</option>
<option value="I">Indigo</option>
</select>
$("#val option[value='A'],#val option[value='C']").remove();
あるいは、getElementsByNameでこれを達成することもできます
<select id="mySelect" name="val" size="1" >
<option value="A">Apple</option>
<option value="C">Cars</option>
<option value="H">Honda</option>
<option value="F">Fiat</option>
<option value="I">Indigo</option>
</select>
そのため、「C」のオプション値のマッチングでは、リストから車を削除できます。
var selectobject = document.getElementsByName('val')[0];
for (var i=0; i<selectobject.length; i++){
if (selectobject.options[i].value == 'C' )
selectobject.remove(i);
}
その親に移動し、javascriptで親から削除する必要があります。
「Javascriptは要素に自殺をさせませんが、乳児殺しを許可します。」:)
これを試して、
var element=document.getElementsByName(val))
element.parentNode.removeChild(element.options[0]); // to remove first option
document.getElementById(this).innerHTML = '';
If-caseに入れてください。これは、ドキュメント内の現在のオブジェクトを確認し、何も置き換えないだけです。最初にリストをループする必要があります。もしそうなら、すでにそれをしていると思います。
次を使用できます。
if ( frm.product.value=="F" ){
var $select_box = $('[name=val]');
$select_box.find('[value=A],[value=C]').remove();
}
更新:選択ボックスをこれに少し変更した場合
<select name="val" size="1" >
<option id="A" value="A">Apple</option>
<option id="C" value="C">Cars</option>
<option id="H" value="H">Honda</option>
<option id="F" value="F">Fiat</option>
<option id="I" value="I">Indigo</option>
</select>
非jQueryソリューションはこれになります
if ( frm.product.value=="F" ){
var elem = document.getElementById('A');
elem.parentNode.removeChild(elem);
var elem = document.getElementById('C');
elem.parentNode.removeChild(elem);
}
これはそれを行う必要があります
document.getElementsByName("val")[0].remove(0);
document.getElementsByName("val")[0].remove(0);
フィドルを確認してください こちら
if(frm.product.value=="F"){
var select = document.getElementsByName('val')[0];
select.remove(0);
select.remove(1);
}
すべてのオプションをクリアするにはen Important en FOR:remove(0)-Important:0
var select = document.getElementById("element_select");
var length = select.length;
for (i = 0; i < length; i++) {
select.remove(0);
// or
// select.options[0] = null;
}