Удаление параметров из 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 ответа:
Что, если вы создадите новый элемент и переключите его?
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).