2008-10-27 16 views
14

Aşağıdakileri seçtiyseniz ve bu question gibi bir öğeyi seçmek için kullanılacak değeri veya seçili olan öğenin dizinini bilmiyorsanız, yaptığımda jQuery ile seçeneklerden birini nasıl seçebilirim? Option C gibi metin değerini biliyor musunuz? eyelidlessness işaretJQuery'yi kullanarak bir öğeyi metin değeriyle nasıl seçerim?

// option text to search for 
var optText = "Option B"; 
// find option value that corresponds 
var optVal = $("#list option:contains('"+optText+"')").attr('value'); 
// select the option value 
$("#list").val(optVal) 

olarak metin birden fazla seçenek bulunabilir aranır edilirken, bu beklenmedik davranacaktır:

<select id='list'> 
<option value='45'>Option A</option> 
<option value='23'>Option B</option> 
<option value='17'>Option C</option> 
</select> 
+0

heh - i/thought/bu tanıdık geldi! – nickf

cevap

14
var option; 
$('#list option').each(function() { 
    if($(this).text() == 'Option C') { 
     option = this; 
     return false; 
    } 
}); 
+1

Bu eminim acemi bir soru ama ayar seçeneği nedir = bu; Yukarıdaki kodda yapmak? –

+1

@Carvell, 'option', dış kapsamda 1. satırda başlatılır, ancak değeri "undefined" dir. Satır 4'teki 'option' ayarlanarak, dış kapsamda 'option', metin değeri '' Seçenek C '' olan DOM öğesidir. ".each" döngüsünden sonra, dış kapsamda, "seçenek", o belirli öğeye başvurmak için kullanılabilir. – eyelidlessness

+0

Ah tamam. Bu mantıklı. Eksik olduğum her fonksiyonda bir şeyler yapması gerektiğini düşünüyordum. Dış kapsam kullanımı için ayar anlıyorum :) Teşekkürler. –

14

Bu hile yapmak gerekir.

+1

Buradaki sorun, "Seçeneği B Değil" veya "Seçenek B12" metniyle de bir seçenekle eşleşmesidir (açıkçası örnek kapsamı dışındadır, ancak örnek açıkça açıktır). – eyelidlessness

+3

"Dize içinde bir yer" yerine tam eşlemeyi istiyorsanız, içerik yerine [text = "optText"] seçeneğini kullanabilirsiniz. –

+0

@Scott jQuery 1.6.1 (ve 1.6.2) sürümüne yükseltilmesinden bu yana çalışmaya başladığım için bir zaman ayırmaya başladım. Aşağıdaki yorumları Pavel'in cevabına bakın. –

4
function SelectItemInDropDownList(itemToFind){  
     var option; 
     $('#list option').each(function(){ 
      if($(this).text() == itemToFind) { 
       option = this; 
       option.selected = true; 
       return false;  
       } 
      }); } 

Yalnızca önceki listeyi değiştirdim, çünkü yalnızca seçim listesindeki seçeneği belirlediğinden, bazıları tam bir gösterim isteyebilir.

9
$("#list option").each(function() { 
    this.selected = $(this).text() == "Option C"; 
}); 
+0

Bütün öğleden sonra bununla mücadele ediyorum. JQuery 1.6.1'den önce çalışan kodum vardı, ör. . $ (This) .find ('seçeneği [text = "sometext"]) val(); Burada $ (this) bir seçim öğesidir, ancak bir sebepten ötürü bu kod sadece tanımlanmamış olarak dönüyordu. Fikrimi güzel ve özlü olan @Pavel'in cevabını kullandım ve kodumu tekrar çalıştırdım. Teşekkürler! Hala eski kodun neden çalışmayı bıraktığını bilmek isterim ...? –

İlgili konular