我知道有多種方法可以選擇從使用jQuery特定選項:最正確的方式來選擇選項
$select.val("someValue")
$option.attr("selected", "selected")
$select[0].selectedIndex = 1
假設你有選擇你希望被選擇的指數和它的價值,什麼是最正確的方式(從上面或其他)到m選擇它嗎?
通過「最正確」,我的意思是:
- 最佳實踐,如果有的話
- 將正確的設定值,使其與表單提交,並且可以使用任何上述檢索方法
- 任何其他原因,我就選擇了其他
我知道有多種方法可以選擇從使用jQuery特定選項:最正確的方式來選擇選項
$select.val("someValue")
$option.attr("selected", "selected")
$select[0].selectedIndex = 1
假設你有選擇你希望被選擇的指數和它的價值,什麼是最正確的方式(從上面或其他)到m選擇它嗎?
通過「最正確」,我的意思是:
$ select.val(「someValue中」)
這很好,在通常情況下它是一個非multiple
選擇,你沒有這兩個不同<option>
s的相同value
。如果是這樣的話,我會選擇這個最可讀的選項。
$選擇[0] .selectedIndex = 1
這是更直接的,所以稍微更快,且必須爲在那裏你有相同的值的多個選項的情況下是毫不含糊的。
如果你可能有一個multiple
- 選擇,你必須得到/單獨設置每個選項的selectedness:
$select[0].options[1].selected= true;
但是:
$ option.attr( 「選擇」, 「selected」)
通常不是最好的方法。 attr()
的問題在於,如果訪問DOM屬性和HTML屬性就好像它們是相同的東西,試圖隱藏與您的不同之處是一件討厭的事情。在這種情況下,attr()
將執行的操作是設置selected
DOM 屬性,這是一個布爾值。所以attr('selected', true)
會更有意義;作爲字符串值的'selected'
也可以工作,但僅僅是因爲所有非空字符串值都是JavaScript中的「真理」。
如果你實際上是在這裏設置的HTML selected
屬性,它不會對期權的selectedness的效果,因爲selected
屬性實際上映射到defaultSelected
財產,而不是selected
! selected
屬性反映用戶更改的運行時表單內容; defaultSelected
反映文檔中包含初始選擇狀態的實際屬性。
(除IE外,由於缺省值的缺陷,以及在其他瀏覽器中,在某些情況下太複雜且容易混淆的情況下)。回家建議:不要嘗試設置selected
來自腳本的HTML屬性作爲結果可能是不可預知的。使用DOM屬性。value
/defaultValue
對於輸入和checked
/defaultChecked
對於複選框/無線電也是如此。)
最常用的方法是$select.val("someValue")
一個方法,這是在文檔中設置的值的官方方法因爲它會是最優化的一個,並且它們會影響性能領域。
對於#2,是的,它滿足這一點,對於#3 ...它很短,仍然使你的意圖非常明確。
也就是說,最快的方式,如果您設置了數千個選擇元素,則爲$select[0].selectedIndex = 1
路由......您無法獲得比本機DOM屬性更快的速度。當設置一個值時(除非它有很多項目,在這種情況下再與.selectedIndex
一起使用),速度應該如此之大,三者之間無關緊要。
正如Nick Craver提到的其中任何一個都可以工作,它確實取決於哪個最適合您的需求。
就個人而言,如果我需要速度我只是使用類似(未測試,只是一個例子):
var elem = document.getElementById('myselectid');
elem.options[1].value = 'some value'
但是,你做這個失去的jquery
好處。
例如,如果您需要根據模式進行很多更改,那麼您可以使用jquery來提供幫助,這將減少您需要編寫的未測試代碼的數量。你可以做一個很好的模式列表,你可以看看這個:http://www.myphpetc.com/2009/03/jquery-select-elements-tips-and-tricks.html。
因此,在任何情況下都沒有最好的方法,這就是爲什麼在select
元素中設置option
的方法有很多種方法,但是如果您在此處提供用戶故事,那麼可以解釋具體的最佳做法。