首先是定義的select元素:
//根據ID獲得select元素
var mySelect = document.getElementByIdx_x("mySelect");
方法一:
通過new Option(value,text)函數,第一個參數是顯示的文字,第二個參數是value值,如果需要添加其他屬性,可以這樣:
var opp = new Option("aaa","001");
opp.name = "option1";
//將option添加到select標簽里面
mySelect.add(opp);
//添加完成
方法二:
通過document.createElement_x()來創建選項,然后再設置選項的屬性。在這里w3c標准是可以設置option的label屬性即為顯示文本,但事實證明FF並不支持,只是給option增加了一個label屬性。而w3c中定義的readonly的屬性text,在FF中卻可以設置。那么是否需要判斷瀏覽器類型呢?當然不用,該方案代碼如下
var option = document.createElement_x('option');
try{
// 二級DOM中該屬性為readonly,但FF確可寫,且可顯示為選項內容
option.text = “aaa”;
}catch(e){
// IE支持label,可以直接顯示為選項的文字
option.label = "aaa";
}
option.value = "001";
// 如果不傳第二個參數,FF下會報錯
mySelect.add(option, null);
這里要注意的add()函數的第二個參數,該參數為before,可以指定選項插到哪個選項之前,如果為null則插到最后。如果不指定這個參數在IE系不會有問題,FF下會報錯,提示Not enough arguments,參數不足,所以最好傳個null先。
方法三:
比較少用於select元素上,IE下是無效的,但是動態添加其他元素的孩子時經常用到。當然也可以設置元素屬性后appendChild(),同方案二。這里要先把select隱藏掉,這樣可以減少瀏覽器重繪次數,對於display='none'的元素的操作不會引起重繪或回流。再改變完之后再顯示出來:
//首先設置select元素不可見
mySelect.style.display = 'none';
//給select元素添加option選項
mySelect.innerHTML += '
//最后將select元素設置可見
mySelect.style.display = 'block';
OK!!!
這三種方式最常用的就是第一種了,沒有兼容性問題,其他兩種只是在此作為例子,展示創建option的方法。
動態刪除select中的所有options:
document.getElementByIdx_x("ddlResourceType").options.length=0;
動態刪除select中的某一項option:
document.getElementByIdx_x("ddlResourceType").options.remove(indx);
動態添加select中的項option:
document.getElementByIdx_x("ddlResourceType").options.add(new Option(text,value));
兼容IE和FF的Javascript動態添加Select控件的Option選項
看了很多Javascript的書籍,發現對Select可以使用add方法添加Option選項。
selectObj.add(new Option("Label", "Value"));
但是add方法好像只在IE下好用。現在提供一個通用的方法:
selectObj.options[selectObj.length] = new Option("Label", "Value");
另外如果想還想使用add方法,可以寫成如下格式:
selectObj.add(new Option("Label", "Value"), null);
請注意,在IE6及IE7下請使用不帶null參數的add方法,在FF下請使用帶null參數的方法,IE8下帶不帶都可以。
很奇怪為什么一定要加null,我猜測add方法里一定使用了'=== null'來判斷第二的參數或者沒有對參數數組的長度做驗證