2013-07-19 1 views

Antwort

9

Von vielen möglichen Ansätzen erfordert diese Methode Browser-Sniffing (was im Allgemeinen nicht groß ist), erfordert aber nicht mehrere Kopien derselben Auswahlliste zum Ein- und Auslagern.

//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() 
    } 
}); 

Kredit hierfür liegt eindeutig bei Dima Svirid hier: http://ajax911.com/hide-options-selecbox-jquery/

+0

Dies funktioniert, aber letztlich eine bessere und sauberere Cross-Browser-Lösung ist das Erstellen, Hinzufügen und Entfernen von ausgewählten Elementen in Echtzeit mit Skript. –

+1

Ausgezeichnete @tony :) Funktioniert perfekt! –

+0

Dies ist unglaublich hacky, obwohl leider die einzige Lösung, die ich für ein Projekt finden könnte, die eine signifikante recode erforderlich hätte, um jede andere Methode zu implementieren. Prost. – AJReading

3

nur zu erwähnen, dass IE11 navigator.appName gibt 'Netscape' :) So ist es unter Berücksichtigung:

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

Dies ist ein guter Punkt. Andere Browser können jedoch [auch hier 'Netscape' auswählen] (http://stackoverflow.com/questions/14573881/why-does-javascript-navigator-appname-return-netscape-for-safari-firefox-and- ch), so dass Ihre Laufleistung variieren kann. –

Verwandte Themen