ChatGPT解决这个技术问题 Extra ChatGPT

如何删除选择框的所有选项,然后添加一个选项并使用 jQuery 选择它?

使用核心jQuery,如何删除选择框的所有选项,然后添加一个选项并选择它?

我的选择框如下。

<Select id="mySelect" size="9"> </Select>

编辑:以下代码有助于链接。但是,(在 Internet Explorer 中).val('whatever') 没有选择添加的选项。 (我确实在 .append.val 中使用了相同的“值”。)

$('#mySelect').find('option').remove().end()
.append('<option value="whatever">text</option>').val('whatever');

编辑:试图让它模仿这段代码,每当页面/表单被重置时,我都会使用以下代码。此选择框由一组单选按钮填充。 .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>') ;

但是这两个答案都让我找到了最终的解决方案..


n
nickf
$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;

@nickf:我有同样的问题,但我需要添加一组复选框,而不是在更改下拉列表时添加一个复选框,但我的复选框来自 xml。这不起作用
请注意,您还可以分解选项/属性/文本,例如:.append($("<option></option>").attr("value", '123').text('ABC!')
@BrockHensley,我相信这个答案的真正优雅之处在于与 end() 函数的正确链接。你的建议也会奏效。来自 jQuery API 文档:“大多数 jQuery 的 DOM 遍历方法对 jQuery 对象实例进行操作并生成一个新的对象实例,以匹配一组不同的 DOM 元素。发生这种情况时,就好像将新的一组元素推入堆栈“
这是我能够重建菜单并在 iOS 的 PhoneGap 上的 jQuery Mobile 中更改所选选项的唯一方法。之后还需要刷新菜单。
@BrockHensley 你甚至可以做到 .append($("<option></option>", {'value':'123'}).text('ABC!')
v
vzwick
$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;

只是出于好奇,“空”比“查找”快吗?似乎是这样——因为“查找”会使用选择器,而“空”只会强行清空元素。
@DanEsparza 我让你成为了一个 jsperf; empty() 当然更快;)jsperf.com/find-remove-vs-empty
这个解决方案有一个奇怪的故障。它的填充部分没问题,但是当我尝试选择一个值(在我的情况下为一天)时,我可以控制台记录该值,但选择字段中显示的值保持在第一个值中......我可以'不解决它:/
@TakácsZsolt 也许您应该在链的末尾添加一个 .val('whatever') ,就像马特的回答一样。
empty() 将删除所有内容,甚至是评论,而 find("option") 不会。只是一点点评论... =D
A
Anand

为什么不只使用普通的javascript?

document.getElementById("selectID").options.length = 0;

我同意这是删除所有选项的最简单的解决方案,但这只能回答一半的问题......
这不会造成内存泄漏吗?选项元素现在不可访问,但仍被分配。
m
mauretto

如果您的目标是从选择中删除除第一个选项之外的所有选项(通常是“请选择一个项目”选项),您可以使用:

$('#mySelect').find('option:not(:first)').remove();

这应该是答案。所有其他人都故意删除了第一个,以便以后重新创建它,我不喜欢;这也意味着他们也首先将第一个选项存储在某个地方。
r
row1

我在 IE7 中有一个错误(在 IE6 中工作正常),使用上述 jQuery 方法会清除 DOM 中的选择,但不会清除屏幕上的选择。使用 IE 开发人员工具栏,我可以确认选择已被清除并具有新项目,但在视觉上,选择仍然显示旧项目 - 即使您无法选择它们。

解决方法是使用标准 DOM 方法/属性(如海报原件那样)来清除而不是 jQuery - 仍然使用 jQuery 添加选项。

$('#mySelect')[0].options.length = 0;

我也必须在 ie6 中使用此方法,因为 .empty() 导致包含在隐藏容器中的选择框即使在父项被隐藏时也变得可见。
这种方法的性能也提高了一点点(大约 1%):jsperf.com/find-remove-vs-empty
+1 这是最易读的(在我看来),在 jsPerf 链接(@vzwick 链接)中,接受的答案慢了 34%(Opera 20)
H
Heemanshu Bhalla

不确定“添加一个并选择它”的确切含义,因为无论如何默认情况下都会选择它。但是,如果您要添加多个,那就更有意义了。怎么样:

$('select').children().remove();
$('select').append('<option id="foo">foo</option>');
$('#foo').focus();

对“编辑”的回应:您能否阐明“此选择框由一组单选按钮填充”的意思? <select> 元素不能(合法)包含 <input type="radio"> 元素。


H
Hayden Chambers
$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;

我们仍在使用 IE6,但这种方法不起作用。但是,它在 FF 3.5.6 中确实有效
可能必须在末尾添加 .change() 才能触发选择的更改
j
jvarandas
$("#control").html("<option selected=\"selected\">The Option...</option>");

K
Kaushik shrimali

只需一行即可从选择标签中删除所有选项,然后您可以添加任何选项,然后在第二行添加选项。

$('.ddlsl').empty();

$('.ddlsl').append(new Option('Select all', 'all'));

还有一种捷径,但没试过

$('.ddlsl').empty().append(new Option('Select all', 'all'));

A
Al Foиce ѫ

多亏了我收到的答案,我才能够创造出符合我需要的类似以下内容。我的问题有点模棱两可。感谢您的跟进。我的最后一个问题是通过在我想要选择的选项中包含“选择”来解决的。

$(function() { $('#mySelect').children().remove().end().append('') ; // 清除选择框,然后添加一个被选中的选项 $("input[name='myRadio']").filter( "[value='1']" ).attr( "checked", "checked" ); / / 选择值为 1 的单选按钮 // 将点击事件绑定到每个单选按钮。 $("input[name='myRadio']").bind("click", function() { switch(this.value) { case " 1": $('#mySelect').find('option').remove().end().append('') ; break ; case "2": $('#mySelect').find('option').remove() ; var items = ["Item1", "Item2", "Item3"] ; // 本地设置为演示 var options = ' ' ; for (var i = 0; i < items.length; i++) { if (i==0) { options += ''; } else { options += ''; } } $( '#mySelect').html(options); // 使用数组 break 填充选择框 } // 切换结束 } // 绑定函数n 结束); // 绑定结束 }); // 事件监听结束


m
marioosh

我在网上找到了类似下面的东西。在我的情况下,有数千个选项,这比 jQuery 中的 .empty().find().remove() 快得多。

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;
}

更多信息here


S
Shiv

将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>
');

t
tuomastik

另一种方式:

$('#select').empty().append($('<option>').text('---------').attr('value',''));

在此链接下,有一些好的做法https://api.jquery.com/select/


H
Hakan Fıstık

首先清除所有现有选项,除了第一个选项(--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)); }


D
Dev Chauhan
$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');

第一行代码将删除选择框的所有选项,因为没有提到选项查找条件。

第二行代码将添加具有指定值(“testValue”)和文本(“TestText”)的选项。


虽然这可能会回答这个问题,但如果您提供有关它如何回答问题的解释,它会更有用。
h
humbads

基于 mauretto 的回答,这更容易阅读和理解:

$('#mySelect').find('option').not(':first').remove();

要删除除具有特定值的选项之外的所有选项,您可以使用以下命令:

$('#mySelect').find('option').not('[value=123]').remove();

如果要添加的选项已经存在,这会更好。


R
Rahil Wazir

使用 jquery prop() 清除选定的选项

$('#mySelect option:selected').prop('selected', false);

.prop() 仅在 jQuery 1.6+ 中生效。对于 jQuery 1.5-,使用 .attr()
B
Barun

这将用新的 mySelect 替换现有的 mySelect。

$('#mySelect').replaceWith('<Select id="mySelect" size="9">
   <option value="whatever" selected="selected" >text</option>
   </Select>');

N
Nadeem Manzoor

你可以简单地通过替换 html

$('#mySelect')
.html('<option value="whatever" selected>text</option>')
.trigger('change');

C
Carlos

清洁工给我点赞

   let data= []

   let inp = $('#mySelect')
        inp.empty()

        data.forEach(el=> inp.append(  new Option(el.Nombre, el.Id) ))

N
Nifemi Sola-Ojo

保存要附加到对象中的选项值

清除选择标签中的现有选项

迭代列表对象并将内容附加到预期的选择标签

var listToAppend = {'':'选择车辆','mc':'Motor Cyle','tr':'三轮车'}; $('#selectID').empty(); $.each(listToAppend, function(val, text) { $('#selectID').append( new Option(text,val) ); });


m
michael01angelo

我在 Select2 - Clearing Selections 中看到了这段代码

$('#mySelect').val(null).trigger('change');

即使没有 Select2,此代码也适用于 jQuery


K
Kazeem Quadri

我使用香草 javascript

let select = document.getElementById("mySelect");
select.innerHTML = "";

M
Md. Russel Hussain

希望它会起作用

$('#myselect').find('option').remove()
.append($('<option></option>').val('value1').html('option1'));

如果更多选项我无法选择第二个选项,它会起作用
L
LN Nitharsan
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('');

K
Kamil Kiełczewski

尝试

mySelect.innerHTML = `<option selected value="whatever">text</option>`

函数 setOne() { console.log({mySelect}); mySelect.innerHTML = ``; }


d
double_u1

最短的答案:

$('#mySelect option').remove().append('<option selected value="whatever">text</option>');

r
rsm

尝试

$('#mySelect')
.html('<option value="whatever">text</option>')
.find('option:first')
.attr("selected","selected");

或者

$('#mySelect').html('<option value="4">Value 4</option>
 <option value="5">Value 5</option>
<option value="6">Value 6</option>
<option value="7">Value 7</option>
<option value="8">Value 8</option>')
.find('option:first')
.prop("selected",true);