<select id="select1">
<option value="11">11</option>
<option value="12">12</option>
</select>
<select id="select2">
<option value="21">21</option>
<option value="22">22</option>
</select>
find()
和children()
方法的行为:
find()
:
$('#select1, #select2').find('option:not(:first)').remove();
按预期工作:select1
只有选项11
而select2
只有选项21
children()
:
$('#select1, #select2').children('option:not(:first)').remove();
奇怪的是:select1
只有11
选项,但select2
已无法选择......
为什么吗
答案 0 :(得分:3)
我无法解释为什么.find
正在使用:first
,但.children
无法与:first
合作,因为:first
获得第一个选定元素集中的选定元素,而不是第一个子元素。你想要的是:first-child
。
// children
$('#select1, #select2').children('option:not(:first-child)').remove();
// find
$('#select3, #select4').find('option:not(:first-child)').remove();
演示:http://jsfiddle.net/tyZzy/2/
这可能是一个错误,但需要更多的研究。
答案 1 :(得分:2)
从我看到的
$('#select1, #select2').find('option:not(:first)')
等于
$('#select1 option:not(:first), #select2 option:not(:first)')
不
$('#select1, #select2').children('option:not(:first)')
考虑上下文选择器,因为它与使用.find()
相同$('option:not(:first)',$('#select1, #select2'))
通过使用具有第一个...的子项,您只获得在集合中返回的第一个子选项..而context / find选择器在每个上下文中查找第一个