Устранить проблему с производительностью выпадающих опций - PullRequest
2 голосов
/ 07 мая 2011

Мне нужно знать самый быстрый способ удаления сотен опций из выпадающего списка.

Сейчас Firefox очень медленно обновляет мой второй выпадающий динамический список. С Chrome все в порядке со сценарием, но мне нужно ускорить удаление:

<select id="myDropDown" name="myDropDown">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
... all the way to let's say 500
</select>

Заселение это бриз. У меня есть парсер JSON, который создает <option></option> поля.

Я пробовал:

.remove()
.children().remove()   
.empty()

Все они имеют одинаковую вялую производительность при удалении сотен опций. Я что-то упускаю?

Ответы [ 4 ]

1 голос
/ 07 мая 2011

Вы пробовали их циклически проходить?

$('#myDropDown option').each(function(i, option){ $(option).remove(); });

Какие из них вы можете указать, отслеживая значение i.

0 голосов
/ 18 января 2013
$("#myDropDown").find("option").remove();
0 голосов
/ 07 мая 2011

Проблема может заключаться в том, что jQuery пытается выполнить очистку при удалении объектов, для подробностей прочитайте .empty () (начиная с «Чтобы избежать утечек памяти ...»).

Есливы думаете, что это не проблема в вашей ситуации, тогда

$("#someOption").text("");

может быть кувалдой, которая вам нужна.

0 голосов
/ 07 мая 2011

Интересный вопрос. Я думаю, что если вы хотите, чтобы это было действительно быстро, вы могли бы просто показать / скрыть параметры

$("#someOption").hide();

EDIT: Я думаю, что у вас может быть массив значений, которые нужно заполнить, скажем, values. Было бы быстро, если бы вы сначала просмотрели свои параметры и проверили для каждого из них, находится ли он в массиве values (не наоборот, будет медленно). Итак, имея:

var values = [...]; //Array with values that must 'exist' in the dropdown
$("#select1 option").each(function(i, option){
   option.style.display = ($.inArray(option.value, values) >= 0 ? 'block' : 'none');
});

Обратите внимание, что мы избегаем селекторов jquery внутри цикла для повышения производительности. Мы не просматриваем сначала массив (и параметры внутри), потому что поиск в массиве намного быстрее, чем поиск элемента (в данном случае - параметра) с определенным атрибутом (в данном случае значением) в dom.

Надеюсь, это поможет. Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...