Удаление параметров из select в IE6


Я пытаюсь заново заполнить выпадающее меню. Я делаю вызов ajax, чтобы получить myList. Когда у меня есть новый список, я удаляю все опции из элемента select и вставляю новые значения (около 100 опций). Это отлично работает на более поздних версиях IE и Firefox; обновление происходит почти мгновенно. Однако в IE6 эти операции действительно замедляют работу браузера. Выпадающее окно почти становится анимированным, когда из него удаляются опции, и это продолжается в течение нескольких секунд. Есть есть ли способ ускорить это, кроме сравнения старого списка с новым и только удаления / добавления элементов, которые изменились?

$("#myselect").children.remove();

$.each(myList, function(i, val) {
   $("<option>").attr("value", val.myID)
                .text(val.myText)
                .appendTo("#myselect");
});
2 2

2 ответа:

Что, если вы создадите новый элемент и переключите его?

var newSelect = $("<select></select>");
$.each(myList, function(i, val) {
    $("<option>").attr("value", val.myID)
                 .text(val.myText)
                 .appendTo(newSelect);
});
$("#myselect").replaceWith(newSelect);

Хотя ваш код намного приятнее, если он слишком медленный, идите по прямому маршруту (я делал это в прошлом, до использования jQuery, и это было мгновенно во всех браузерах, включая IE6). Просто удалите все дочерние элементы из select, удалив html:

$("#myselect").html('');

И измените цикл таким образом, чтобы создать html для каждого параметра и вставить его в select с помощью

$('#myselect').html(optionsHTML); 

В зависимости от производительности, вы можете попробовать найти золотую середину между этим решением и решением karim79. (т. удалите параметры с помощью html () и добавьте их с помощью массива вместо создания простого HTML).