Удаление опций из выбора в IE6 - PullRequest
2 голосов
/ 30 ноября 2009

Я пытаюсь заполнить выпадающее меню. Я делаю 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 голосов
/ 30 ноября 2009

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

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

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

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

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

2 голосов
/ 30 ноября 2009

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

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