2012-06-13 3 views
9

전체적으로 SELECT 입력에서 빈 옵션을 모두 제거하고 싶습니다. select는받은 객체에 따라 다른 사람이 작성한 스크립트에서 동적으로 생성됩니다. 내 문제는 때로는 개체가 빈 값을 가지고, 내가 원하는 것을 남기는 선택 옵션 세트를 남겨 둡니다.빈/null 값으로 선택에서 jQuery 찾기 옵션 값을 제거한 후 첫 번째 옵션을 선택하십시오.

어쨌든 거의 언제나 세트의 첫 번째 옵션이 비어 있습니다. 그래서 그것을 제거하고 selected="selected" 첫 번째 옵션이 제거 된 후에 나오는 첫 번째 옵션에 적용하고, 빈 값을 가진 다른 가능성은 제거하면서 제거하고 싶습니다.

그래서 초기 개념을 테스트에 나는

전체 선택을 제거하는 것
$(select).each(function(){ 
       if ($(this+' option:selected').val() == '') 
       { 
        //this assumes that your empty value is '' 
        $(this).remove(); 
       } 
      }); 

함께했다, 나는 그 원인 this이 자신을 선택으로 정의된다 알고있다.

나는 또한 내가 그 다음 내가의 첫 번째 항목을 선택하는 방법을 알아낼 것이다 달성 할 수 이후 난 단지,이 빈 값으로 옵션을 제거하려고 노력하고 현재 $(select +'option[value=""]').remove();

을 시도했습니다 공식적으로 DOM에 관한 한 목록.

또한 '선택'을 전달할 변수는 이전에 함수에서 정의되어 있으므로 해당 부분에서 작동합니다. 그냥 선생님, 아무도 내가 어떻게 다른 것과 혼란스러워하는지 생각하지 않습니다.

답변

12
  • 당신이 selected

코드와 같은 특별한 속성을 설정하는 빈 옵션 요소를 걸러 한 번

  • 사용 .prop()에 그들 모두를 제거하는 .filter()를 사용할 수 있습니다

    $('select option') 
        .filter(function() { 
         return !this.value || $.trim(this.value).length == 0; 
        }) 
        .remove(); 
    
    $('select option') 
        .first() 
        .prop('selected', true);​ 
    

    DEMO

  • 0

    구조에 POJS!

    function fixSelectOptions(SelectId){ 
    var sel = document.getElementById(SelectId); 
    for(var i = 0; i < sel.options.length; i++){ 
        if(sel.options[i].value === ""){ 
        sel.remove(i--);//decrease i to preserve future index references after removal 
        } 
    } 
    sel.options.selectedIndex = 0; 
    } 
    
    10

    이쉽게 수행 할 수 있습니다

    Element.find('option[value=""]').remove(); 
    
    +3

    사람이 궁금하기 위해 그들이 모든 값 속성을 가지고 있지 않기 때문에, 이것은 ""로 작성 옵션에서 작동하지 않습니다. 여기서의 미묘한 차이점은'$ ("") 동안 .attr ("value") == undefined 일 때'$ ("") .attr '' – apokryfos

    관련 문제