2013-07-19 10 views

risposta

9

Di molti approcci possibili, questo metodo richiede lo sniffing del browser (che in generale non è eccezionale) ma non richiede di avere più copie dello stesso elenco di selezione per lo scambio in entrata e in uscita.

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

Credito per questo sta ad angolo retto con Dima Svirid qui: http://ajax911.com/hide-options-selecbox-jquery/

+0

Funziona, ma in definitiva una soluzione cross-browser migliore e più pulita è quella di creare, aggiungere e rimuovere gli elementi selezionati in tempo reale con lo script. –

+1

Eccellente @tony :) Funziona perfettamente! –

+0

Questo è incredibilmente hacky, anche se purtroppo l'unica soluzione che ho potuto trovare per un progetto che avrebbe richiesto una significativa ricodifica per implementare qualsiasi altro metodo. Saluti. – AJReading

3

Solo per citare che IE11 navigator.appName ritorna 'Netscape' :) Quindi, prendendo in considerazione:

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

Questo è un buon punto. Tuttavia, altri browser possono [scegliere di restituire 'Netscape' anche qui] (http://stackoverflow.com/questions/14573881/why-does-javascript-navigator-appname-return-netscape-for-safari-firefox-and- ch), quindi il tuo chilometraggio può variare. –

Problemi correlati