2012-09-19 2 views
3

다음과 같은 HTML 고려 설정되어 있지 않은 경우 HTML() 대신 발() 값 속성이

<select> 
    <option value="hasAttr">Has a value attr</option> 
    <option>Does not have a value attr</option> 
</select> 

당신이 볼 수 있듯이을 옵션 중 하나는 설정 값 속성을 가지고 있으며, 다른 사람은 그렇지 않습니다. 그러나 jQuery를 통해 각 옵션에 대해 val()을 검사 할 때 값 속성이 설정되지 않은 옵션은 일반적으로 예상하는대로 undefined 대신에 태그 (html()) 내부의 텍스트를 반환합니다.

var $select = $('select'); 

$select.each(function() { 
    var $this = $(this), 
     $options = $this.children('option'); 

    $options.each(function(){ 
     var $option = $(this), 
      $value = $option.val(), 
      $html = $option.html(); 

     console.log('Option Value: '+ $value +'\nOption HTML: '+ $html); 

    }); 

}); 

내가 $option.attr('value') 찾기 위해 코드를 변경하더라도, 난 여전히 같은 결과를 얻을 수 있습니다. boolean을 반환하는 value 속성이 있는지 <option>에 있는지 확인할 수있는 방법이 있습니까?

여기는 jsFiddle입니다.


업데이트 된 내용은 jsFiddle입니다.

+0

옵션을 사용하지 않으려면 '

답변

10

이것은 올바른 표준 동작입니다. value 속성이 없으면 요소의 텍스트 콘텐츠가 요소의 값으로 사용됩니다. W3C website 가입일

:

[속성치]가 없을 경우는 옵션 요소 값이 요소의는 TextContent이다.


당신은 DOM 노드에 getAttribute를 사용하여 콘텐츠 속성의 존재를 테스트 할 수 있습니다 : 당신은 "이-속성"선택과 jQuery를 is 방법을 사용할 수 있습니다, 또는

$option[0].getAtribute('value') // returns null 

:

$option.is('[value]') // returns false 
+0

이해하지만 실제로는 그 질문에 대답하지 않습니다. 속성이 실제로 설정되었는지 여부에 따라 옵션에 true 또는 false를 반환하는 value 속성을 확인할 수있는 방법이 있습니까? – sbeliv01

+0

@ sbeliv01 편집을 참조하십시오. – lonesomeday

+1

부울 값만 원할 경우 [hasAttribute] (https://developer.mozilla.org/en-US/docs/DOM/element.hasAttribute)를 사용할 수도 있습니다. –

관련 문제