2011-08-17 60 views
4

第一种选择我有下拉非常类似:选择在多组下拉jquery的

<select id='someSelect'> 
    <option value="0">---select one---</option> 
    <optgroup label="Bikes"> 
     <option value="B-4">Hayabusa</option> 
     <option value="B-2">GSXR</option> 
     <option value="B-3">Ninja</option> 
     <option value="B-6">Enticer</option> 
    </optgroup> 
    <optgroup label="Cars"> 
     <option value="C-4">Audi TT</option> 
     <option value="C-2">Awesome Car</option> 
     <option value="C-23">Japanese car</option> 
     <option value="C-9">German car</option> 
    </optgroup> 
</select> 

我只是想(这里自行车)选择第一组的第1个要素。我该如何在jQuery中进行讨论?

目前,我尝试这样做:

$('#someSelect option:nth-child(1)').attr("selected", "selected"); 

,麻烦的是,因为有三个1元(--select--HayabusaAudi TT)它选择所有三个,其中finaly选择Audi TT

我试图用each做一些事情,并选择第二个,但后来我意识到,下拉是动态的,我不想选择默认的(这是--select one--),但第一组

我试图嘲弄了的jsfiddle,但它打乱了,而不是工作第一要素,不知道为什么: -/
you can see it here

+0

请避免亵渎,它衬托净保姆,阻止人们使用SO工作,并且倾向于冒犯人们。 –

+0

@Tim,好吧,对不起!那天我很沮丧。将来会避免! – LocustHorde

回答

6

Here是一个例子,这里是我使用的选择:

$("#someSelect optgroup option:first").attr("selected", "selected"); 

正如你所看到的,我用了通过查看optgroup元素的第一个选项。

+0

aa这看起来很明显..有时我的下拉菜单根本没有任何optgroup,它的效果非常好!虽然我不明白如何..谢谢你的答案! – LocustHorde

2

我总是发现.eq()是很容易使用。这似乎在你的jsfiddle中正常工作。

$('#someSelect option').eq(1).attr("selected", "selected"); 
+0

非常感谢你 – LocustHorde

3

就在您选择的OPTGROUP:

$('#someSelect optgroup:nth-child(2) option:nth-child(1)') 

只要记住,:nth-child()选择是基于1,而不是0为主。此外,在这种情况下,你甚至不需要有资格与标签名称的选择,所以它也可能只是:

从OPTGROUP,而不是选择
$('#someSelect :nth-child(2) :nth-child(1)') 
+0

非常感谢你! – LocustHorde

4

选择:

$('optgroup[label=Bikes] option:first') 

或者,如果你不想指定标签,只是在OPTGROUP过滤以及:

$('optgroup:first option:first') 
+0

感谢您的回答! – LocustHorde

2
$('#someSelect optgroup:first option:first').attr('selected', true); 

这个作品,我对你的htm测试升

+0

谢谢你回答 – LocustHorde

1

select元素的第一optgroup第一个option的选择与“someSelect”的ID:

"select#someSelect > optgroup:nth-child(1) > option:nth-child(1)" 
+0

是的,这让我了解它背后的理论,非常感谢你! – LocustHorde