3

所以我有以下代码,它适用于我迄今为止测试过的所有浏览器,除了 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. 警报按应有的方式打印数据,但内部剥离了标签,我最终得到了连续的单词。

那么,有什么想法可以解决这个问题吗?

4

2 回答 2

5

这是一个已知问题, IE不允许您.innerHTML在.optionselect

您应该改为使用 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);
于 2012-12-02T20:39:40.213 回答
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);
}
于 2012-12-02T20:40:52.030 回答