2013-07-19 41 views

Trả lời

9

Trong nhiều phương pháp có thể, phương pháp này yêu cầu trình duyệt đánh hơi (nói chung là không tuyệt vời) nhưng không yêu cầu phải có nhiều bản sao của cùng một danh sách lựa chọn để hoán đổi vào và ra.

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

tín dụng cho điều này nằm thẳng với Dima Svirid đây: http://ajax911.com/hide-options-selecbox-jquery/

+0

Tác phẩm này, nhưng cuối cùng, giải pháp trình duyệt chéo tốt hơn và sạch hơn là tạo, thêm và xóa các mục đã chọn trong thời gian thực bằng tập lệnh. –

+1

Tuyệt vời @tony :) Hoạt động hoàn hảo! –

+0

Điều này là vô cùng khó khăn, mặc dù đáng buồn là giải pháp duy nhất tôi có thể tìm thấy cho một dự án mà có thể đã yêu cầu một recode đáng kể để thực hiện bất kỳ phương pháp khác. Chúc mừng. – AJReading

3

Chỉ cần đề cập đến IE11 navigator.appName trả về 'Netscape' :) Vì vậy, dùng nó vào xem xét:

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

Điều này là một điểm tốt. Tuy nhiên, các trình duyệt khác cũng có thể [chọn trả lại 'Netscape' tại đây] (http://stackoverflow.com/questions/14573881/why-does-javascript-navigator-appname-return-netscape-for-safari-firefox-and- ch), vì vậy số dặm của bạn có thể thay đổi. –