2013-07-19 62 views

回答

9

在許多可能的方法中,此方法需要瀏覽器嗅探(通常不是很好),但不需要具有同一選擇列表的多個副本進行交換。

//To hide elements 
$("select option").each(function(index, val){ 
    if ($(this).is('option') && (!$(this).parent().is('span'))) 
     $(this).wrap((navigator.appName == 'Microsoft Internet Explorer') ? '<span>' : null).hide(); 
}); 

//To show elements 
$("select option").each(function(index, val) { 
    if(navigator.appName == 'Microsoft Internet Explorer') { 
     if (this.nodeName.toUpperCase() === 'OPTION') { 
      var span = $(this).parent(); 
      var opt = this; 
      if($(this).parent().is('span')) { 
       $(opt).show(); 
       $(span).replaceWith(opt); 
      } 
     } 
    } else { 
     $(this).show(); //all other browsers use standard .show() 
    } 
}); 

信用這個完全在於迪馬Svirid這裏:http://ajax911.com/hide-options-selecbox-jquery/

+0

這是有效的,但最終更好,更清潔的跨瀏覽器解決方案是使用腳本實時創建,添加和刪除選定項目。 –

+1

優秀的@tony :)完美的作品! –

+0

這非常令人難以置信,儘管令人遺憾的是我可以找到一個項目的唯一解決方案,該項目需要大量的重新編碼才能實現任何其他方法。乾杯。 – AJReading

3

只是提一提,IE11 navigator.appName返回「Netscape的:) 所以考慮到這一點:

$("select option[value='your_option_value']").wrap((navigator.appName == 'Microsoft Internet Explorer' || navigator.appName == 'Netscape') ? '<span>' : null).hide(); 
+1

This是一個好點。但是,其他瀏覽器可以[也選擇在這裏返回'網景'](http://stackoverflow.com/questions/14573881/why-does-javascript-navigator-appname-return-netscape-for-safari-firefox-and- ch),所以你的里程可能會有所不同。 –