2016-08-03 191 views
0

我有一個包含多個select元素的html文件。我們需要的是select元素的每個第一個選項的文本都是用jQuery改變的。給出的答案是$('select').children().first().html('changed!');。但這並沒有改變全部第一個選項文本,只有第一個。選擇多個選擇元素的每個第一個選項

這是怎麼回事?

回答

1

使用.each()

$('select').each(function() { 
    $(this).children().first().text('changed!'); 
}); 

請注意,您應該在這種情況下使用text(),不html(),爲<option>元素的含量應該是純文本。

或者,你可以直接選擇第一個選項元素,避免使用children()first()

$('select>option:first-child').each(function() { 
    $(this).text('changed!'); 
}); 
+0

是啊,我不知道爲什麼這本書的作者選擇的.html做到這一點。這不是最好的書!該解決方案有效,但直到現在在書中還沒有提到。無論如何,謝謝! –

1

您也可以使用nth-child-selector來選擇第一,第二....

爲了更改您可以使用的所有選定元素的文字:

$('select option:nth-child(1)').text('changed'); 

或:

$('select option:nth-child(1)').text(function(index, text) { 
    return 'changed'; 
}); 

這是因爲jQuery提供text-function

的片段:

$(function() { 
 
    //$('select option:nth-child(1)').text('changed'); 
 

 
    // or 
 
    $('select option:nth-child(1)').text(function(index, text) { 
 
    return 'changed'; 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<select> 
 
    <option value="volvo">Volvo</option> 
 
    <option value="saab">Saab</option> 
 
    <option value="mercedes">Mercedes</option> 
 
    <option value="audi">Audi</option> 
 
</select> 
 
<select> 
 
    <option value="volvo">Volvo</option> 
 
    <option value="saab">Saab</option> 
 
    <option value="mercedes">Mercedes</option> 
 
    <option value="audi">Audi</option> 
 
</select> 
 
<select> 
 
    <option value="volvo">Volvo</option> 
 
    <option value="saab">Saab</option> 
 
    <option value="mercedes">Mercedes</option> 
 
    <option value="audi">Audi</option> 
 
</select>

+0

哇,這是一個相當的答案!謝謝!這個也很棒。 –

0

有jQuery的兩個選項上descants迭代。你已經使用了不迭代迭代的子節點(),意味着只考慮直接子節點。另一個是find()遞歸迭代,意味着所有孫子節點都與直接子節點一起考慮。我認爲如果你改變你的代碼如下:

$('select').find("option").first().html('changed!'); 

請不要猶豫地問。希望幫助!

您需要遍歷所有的選擇:

$("select").each(function(index,item){ 
     $(item).find("option").first().html('changed!'); 
}); 
+0

謝謝你的回答奧斯曼。不幸的是,這並沒有奏效。它只改變了第一個選擇的第一個選項,而不是其他選項。 –