IE删除使用javascript创建的选项标签

时间:2012-12-02 20:34:26

标签: javascript internet-explorer cross-browser innerhtml

所以我有以下代码,对于我到目前为止测试的每个浏览器都非常有效,除了IE

var array = eval( '(' + xmlHttp.responseText + ')' );
var html = '';

for(var key in array)
{
    html += '<option value="' + key  + '">' +array[key] + '</option>';
}
alert(html);
document.getElementById('countries').innerHTML = html;

问题出在.innerHTML。警报按原样打印数据,但内部剥离标记,最后我会连续输入单词。

那么,任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

这是一个已知问题,IE不允许您使用.innerHTMLoption中设置select元素。

您应该使用DOM方法创建元素。

var fragment = document.createDocumentFragment();

for(var key in array) {
    var opt = fragment.appendChild(document.createElement("option"));
    opt.value = key; 
    opt.text = array[key];
}

document.getElementById('countries').appendChild(fragment);

如果array是实际数组,则在JavaScript中使用for代替for-in

如果您需要先清空select,可以使用.innerHTML = ""或更好的方式清空{:

var sel = document.getElementById('countries');
while (sel.firstChild)
    sel.removeChild(firstChild);

sel.appendChild(fragment);

答案 1 :(得分:3)

var select = document.getElementById('countries'); // assuming this is your <select>
for (var key in array) {
    var option = document.createElement('option');
    option.value = key;
    option.text = array[key];
    select.appendChild(option);
}