Каков наилучший способ добавления параметров в <select>
объект JavaScript с использованием jQuery?
Я ищу что-то, что мне не нужен плагин, но я также был бы заинтересован в плагинах, которые там есть.
Вот что я сделал:
selectValues = { "1": "test 1", "2": "test 2" };
for (key in selectValues) {
if (typeof (selectValues[key] == 'string') {
$('#mySelect').append('<option value="' + key + '">' + selectValues[key] + '</option>');
}
}
Чистое / простое решение:
Это упрощенная версия matdumsa's :
$.each(selectValues, function(key, value) {
$('#mySelect')
.append($('<option>', { value : key })
.text(value));
});
Изменения в matdumsa: (1) убрал тег закрытия для опции внутри append () и (2) переместил свойства / атрибуты на карту как второй параметр append ().
javascript
jquery
arrays
html-select
Дэррил Хейн
источник
источник
value
это строка (и жестко закодированная), которую не нужно заключать в кавычки.Ответы:
Так же, как и другие ответы, в стиле jQuery:
источник
$("#mySelect")
переменную, иначе вызовы$("#mySelect")
каждый раз внутри цикла очень расточительны, как и обновление DOM. См. Пункты № 3 и № 6 на artzstudio.com/2009/04/jquery-performance-rules/…var mySelect = $("#mySelect") outside of the
каждый цикл. Это было бы намного эффективнее. Смотрите ответ Карла нижеattr
иtext
на самом деле это методы$('<option/>')
-объектаТаким образом, вы «касаетесь DOM» только один раз.
Я не уверен, может ли последняя строка быть преобразована в $ ('# mySelect'). Html (output.join ('')), потому что я не знаю внутренних компонентов jQuery (возможно, он выполняет некоторый анализ в html () метод)источник
key
есть некоторые кавычки или>, <
в нем.Это немного быстрее и чище.
источник
JQuery
Ванильный JavaScript
источник
Option
объекте раньше. Это встроено во все браузеры?new Option
, но обнаружил, что это не работает в IE6 и 7. У меня нет причины, почему, но многие из полных опций jQuery работали.new Option('display', value, true)
new Option('display', value, true, true)
( javascriptkit.com/jsref/select.shtml )Если вам не нужно поддерживать старые версии IE, использование
Option
конструктора - это, безусловно, лучший путь, удобочитаемое и эффективное решение :Это эквивалентно по функциональности, но чище, чем:
источник
Это выглядит лучше, обеспечивает удобочитаемость, но медленнее, чем другие методы.
Если вам нужна скорость, самый быстрый (проверенный!) Способ - использовать массив, а не конкатенацию строк и использовать только один вызов добавления.
источник
Уточнение более старого ответа @ joshperry :
Кажется, что обычный .append также работает, как и ожидалось,
или короче,
источник
$.weakmap
чтобы разрешитьGC
map()
конструкцию в сочетании со свойствомappend()
правильно добавлять массив объектов!Все эти ответы кажутся излишне сложными. Все, что тебе нужно:
Это полностью совместимо с браузерами.
источник
new Option(value, key);
? Порядок параметров - Параметры (text_visible_part, value_behind_the_scenes).Будьте предупреждены ... Я использую jQuery Mobile 1.0b2 с PhoneGap 1.0.0 на телефоне Android 2.2 (Cyanogen 7.0.1) (T-Mobile G2) и не могу заставить метод .append () работать вообще. Мне пришлось использовать .html () следующим образом:
источник
Я сделал несколько тестов, и это, я считаю, делает работу быстрее всего. :П
источник
Есть подход, использующий подход Microsoft Templating, который в настоящее время предлагается для включения в ядро jQuery. В использовании шаблонов больше возможностей, поэтому для простейшего сценария это может оказаться не лучшим вариантом. Для получения более подробной информации смотрите пост Скотта Гу с описанием возможностей.
Сначала включите шаблонный файл js, доступный на github .
Следующая настройка шаблона
Затем с вашими данными вызовите метод .render ()
Я блоге этот подход более подробно.
источник
Я сделал что-то вроде этого, загружая выпадающий элемент через Ajax . Ответ выше также приемлем, но всегда полезно иметь как можно меньше модификаций DOM для лучшей производительности.
Поэтому вместо добавления каждого элемента в цикл лучше собирать элементы в цикле и добавлять его после завершения.
Добавить его,
или даже лучше
источник
Простой способ:
источник
Большинство других ответов используют
each
функцию для итерации поselectValues
. Для этого требуется, чтобы append вызывался для каждого элемента, и при каждом добавлении по отдельности запускается перекомпоновка.Обновление этого ответа до более идиоматического функционального метода (с использованием современного JS) может быть сформировано для вызова
append
только один раз, с массивомoption
элементов, созданным с использованием map иOption
конструктора элемента.Использование
Option
элемента DOM должно снизить накладные расходы при вызове функции, так какoption
элемент не нуждается в обновлении после создания, а логика синтаксического анализа jQuery не должна выполняться.Это может быть еще более упрощено, если вы создадите служебную функцию фабрики, которая создаст объект опций:
Тогда это может быть предоставлено непосредственно
map
:Предыдущая формулировка
Потому что
append
также позволяет передаче значений в качестве переменного числа аргументов, можно предварительно создать список изoption
элементов карты и добавить их в качестве аргументов в одном вызове с помощьюapply
.Похоже, что в более поздних версиях jQuery
append
также принимает аргумент массива, и это может быть несколько упрощено:источник
Хорошо работает с jQuery 1.4.1.
Для полной статьи по использованию динамических списков с ASP.NET MVC и jQuery посетите:
Динамические списки выбора с MVC и jQuery
источник
Существует проблема с сортировкой этого решения в Chrome (jQuery 1.7.1) (Chrome сортирует свойства объекта по имени / номеру?) Поэтому, чтобы сохранить порядок (да, это объект злоупотребляет), я изменил это:
к этому
и тогда $ .each будет выглядеть так:
источник
Вместо того, чтобы повторять один и тот же код везде, я бы посоветовал написать собственную функцию jQuery, например:
Затем, чтобы добавить опцию, просто сделайте следующее:
источник
Вы можете просто перебрать свой массив json с помощью следующего кода
$('<option/>').attr("value","someValue").text("Option1").appendTo("#my-select-id");
источник
Хотя все предыдущие ответы являются действительными, может быть целесообразно сначала добавить все это в documentFragmnet, а затем добавить этот фрагмент документа как элемент после ...
Посмотрите мысли Джона Резига по этому вопросу ...
Что-то вроде:
источник
$.each
медленнее, чемfor
цикл$("#mySelect").append();
Таким образом, лучшее решение заключается в следующем
Если данные в формате JSON
resp
являетсяиспользовать его как
источник
Еще один способ сделать это:
источник
$('#mySelect')
затем реорганизовали ответ @rocktheroad ... что угодно, это более практичное решениеЭто манипулирует DOM только один раз после создания гигантской нити.
источник
$("#myselect").empty().append(opts);
наgetElementById('myselect').innerHtml = opts;
Вот что я сделал с двумерными массивами: Первый столбец элемент я, добавить
innerHTML
из<option>
. Второй столбец record_id я, добавить кvalue
из<option>
:PHP
JavaScript / Ajax
источник
Плагин jQuery можно найти здесь: автоматическое заполнение полей выбора с использованием jQuery & AJAX .
источник
Я обнаружил, что это просто и прекрасно работает.
источник
Формат JSON:
И код jQuery для заполнения значений в раскрывающемся списке Ajax:
источник
Используя функцию $ .map (), вы можете сделать это более элегантным способом:
источник
источник
Установите свой HTML select id в следующую строку ниже. Здесь
mySelect
используется как идентификатор элемента select.затем получите объект, который является selectValues в этом сценарии, и установите его в jquery для каждого цикла. Он будет использовать значение и текст объектов соответственно и добавляет его в варианты выбора следующим образом.
Текст будет отображаться в виде списка параметров, если выбран раскрывающийся список, и после выбора текста будет использоваться значение выбранного текста.
Например.
«1»: «тест 1», «2»: «тест 2»,
Падать,
отображаемое имя: тест 1 -> значение равно 1 отображаемое имя: тест 2 -> значение равно 2
источник
На самом деле, для повышения производительности лучше составить список опций отдельно и добавить идентификатор.
http://learn.jquery.com/performance/append-outside-loop/
источник