Как удалить все параметры окна выбора, а затем добавить один параметр и выбрать его с помощью jQuery?
используя core jQuery, как удалить все параметры окна выбора, а затем добавить один параметр и выбрать его?
мое поле выбора выглядит следующим образом.
<Select id="mySelect" size="9" </Select>
EDIT: следующий код был полезен при цепочке. Однако (в Internet Explorer).val('whatever') не выберите параметр, который был добавлен. (Я использовал одно и то же "значение" в обоих .append и .val.)
$('#mySelect').find('option').remove().end().append('<option value="whatever">text</option>').val('whatever');
EDIT: пытаясь заставить его имитировать этот код, я использую следующий код всякий раз, когда страница/форма сбрасывается. Это поле выбора заполняется набором переключателей. .focus() был ближе, но опция не была выбрана, как это происходит с .selected= "true". Ничего плохого в моем существующем коде-я просто пытаюсь узнать jQuery.
var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";
изменить: выбранный ответ был близок к тому, что мне нужно. Это сработало для меня:
$('#mySelect').children().remove().end().append('<option selected value="whatever">text</option>') ;
но оба ответа привели меня к окончательному решению..
21 ответов:
$('#mySelect') .find('option') .remove() .end() .append('<option value="whatever">text</option>') .val('whatever') ;
почему бы просто не использовать простой javascript?
document.getElementById("selectID").options.length = 0;
У меня была ошибка в IE7 (отлично работает в IE6) , где использование вышеуказанных методов jQuery очистит выберите в DOM, но не на экране. Используя панель инструментов разработчика IE, я мог бы подтвердить, что выберите были очищены и имели новые элементы, но визуально выберите все еще показывал старые элементы-даже если вы не могли их выбрать.
исправление состояло в том, чтобы использовать стандартные методы DOM/properites (как и оригинал плаката), чтобы очистить скорее чем jQuery-все еще используя jQuery для добавления опций.
$('#mySelect')[0].options.length = 0;
Если ваша цель состоит в том, чтобы удалить все параметры из выбора, кроме первого (как правило, параметр "Пожалуйста, выберите элемент"), вы можете использовать:
$('#mySelect').find('option:not(:first)').remove();
$('#mySelect') .empty() .append('<option value="whatever">text</option>') .find('option:first') .attr("selected","selected") ;
Не уверен точно, что вы подразумеваете под "добавить и выбрать его", так как он будет выбран по умолчанию в любом случае. Но, если бы вы добавили больше, чем один, это имело бы больше смысла. Как насчет чего-то вроде:
$('select').children().remove(); $('select').append('<option id="foo">foo</option>'); $('#foo').focus();ответ на "Редактировать": можете ли вы уточнить, что вы подразумеваете под "это поле выбора заполняется набором переключателей"? Элемент
благодаря ответам, которые я получил, я смог создать что-то вроде следующего, что соответствует моим потребностям. Мой вопрос был несколько двусмысленным. Спасибо за продолжение. Моя последняя проблема была решена путем включения "selected"в опцию, которую я хотел выбрать.
$(function() { $('#mySelect').children().remove().end().append('<option selected value="One">One option</option>') ; // clear the select box, then add one option which is selected $("input[name='myRadio']").filter( "[value='1']" ).attr( "checked", "checked" ); // select radio button with value 1 // Bind click event to each radio button. $("input[name='myRadio']").bind("click", function() { switch(this.value) { case "1": $('#mySelect').find('option').remove().end().append('<option selected value="One">One option</option>') ; break ; case "2": $('#mySelect').find('option').remove() ; var items = ["Item1", "Item2", "Item3"] ; // Set locally for demo var options = '' ; for (var i = 0; i < items.length; i++) { if (i==0) { options += '<option selected value="' + items[i] + '">' + items[i] + '</option>'; } else { options += '<option value="' + items[i] + '">' + items[i] + '</option>'; } } $('#mySelect').html(options); // Populate select box with array break ; } // Switch end } // Bind function end ); // bind end }); // Event listener end<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <label>One<input name="myRadio" type="radio" value="1" /></label> <label>Two<input name="myRadio" type="radio" value="2" /></label> <select id="mySelect" size="9"></select>
сначала очистить все существующие опции execpt первый (--Select--)
добавить новые значения параметров с помощью цикла Один за другим
$('#ddlCustomer').find('option:not(:first)').remove(); for (var i = 0; i < oResult.length; i++) { $("#ddlCustomer").append(new Option(oResult[i].CustomerName, oResult[i].CustomerID + '/' + oResult[i].ID)); }
Как насчет того, чтобы просто изменить html на новые данные.
$('#mySelect').html('<option value="whatever">text</option>');еще пример:
$('#mySelect').html(' <option value="1" selected>text1</option> <option value="2">text2</option> <option value="3" disabled>text3</option> ');
иначе:
$('#select').empty().append($('<option>').text('---------').attr('value',''));по этой ссылке, есть хорошие практики https://api.jquery.com/select/
Я нашел в сети что-то вроде ниже. С тысячи вариантов как в моей ситуации это намного быстрее, чем
.empty()или.find().remove()С помощью jQuery.var ClearOptionsFast = function(id) { var selectObj = document.getElementById(id); var selectParentNode = selectObj.parentNode; var newSelectObj = selectObj.cloneNode(false); // Make a shallow copy selectParentNode.replaceChild(newSelectObj, selectObj); return newSelectObj; }Подробнее здесь.
основываясь на ответе Моретто, это немного легче читать и понимать:
$('#mySelect').find('option').not(':first').remove();чтобы удалить все параметры, кроме одного с определенным значением, вы можете использовать это:
$('#mySelect').find('option').not('[value=123]').remove();Это было бы лучше, если бы опция для добавления уже была там.
это заменит ваш существующий mySelect на новый mySelect.
$('#mySelect').replaceWith('<Select id="mySelect" size="9"> <option value="whatever" selected="selected" >text</option> </Select>');
вы можете сделать просто заменив html
$('#mySelect') .html('<option value="whatever" selected>text</option>') .trigger('change');
использует jquery prop () чтобы очистить выбранную опцию
$('#mySelect option:selected').prop('selected', false);
надеюсь, что это будет работать
$('#myselect').find('option').remove() .append($('<option></option>').val('value1').html('option1'));
- сохраните значения параметров, которые будут добавлены в объект
- очистить существующие параметры в теге select
- повторите объект списка и добавьте содержимое к намеченному тегу select
var listToAppend = {'':'Select Vehicle','mc': 'Motor Cyle', 'tr': 'Tricycle'}; $('#selectID').empty(); $.each(listToAppend, function(val, text) { $('#selectID').append( new Option(text,val) ); });<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
var select = $('#mySelect'); select.find('option').remove().end() .append($('<option/>').val('').text('Select')); var data = [{"id":1,"title":"Option one"}, {"id":2,"title":"Option two"}]; for(var i in data) { var d = data[i]; var option = $('<option/>').val(d.id).text(d.title); select.append(option); } select.val('');
$("#id option").remove(); $("#id").append('<option value="testValue" >TestText</option>');в первой строке кода будут удалены все параметры окна выбора, поскольку критерии поиска параметров не были упомянуты.
во второй строке кода будет добавлена опция с указанным значением ("testValue") и текстом ("TestText").
Comments