2013-07-19 7 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は 'ネットスケープ' を返すことを言及する:) だからことを考慮:

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

こちらを参照してください。良い点です。しかし、他のブラウザでも[ここで 'Netscape'を返すように選択することができます(http://stackoverflow.com/questions/14573881/why-does-javascript-navigator-appname-return-netscape-for-safari-firefox-and- ch)、あなたの走行距離は異なる場合があります。 –

関連する問題