2017-04-11 3 views
1

대화 상자를 닫는 첫 번째 시도가 왜 작동하지 않습니까? 아니면 jQuery 객체가 $("#dialog")$(this).parent('div.dialog')이 다른 이유는 무엇입니까?jQuery 객체가 다른 이유는 무엇입니까?

$('#click').click(function() { 
    $("#dialog").dialog("open"); 
}); 

$("#dialog").dialog({autoOpen:false}).find('li').click(function(){ 
    $(this).parent('div.dialog').dialog('close'); 
    $("#dialog").dialog("close"); 
}); 

    <div id="dialog"> 
     <ul> 
      <li>111</li> 
      <li>222</li> 
      <li>333</li> 
     </ul> 
    </div> 
+3

"jQuery 객체 $ ("# dialog ")가 $ (this) .parent ('div.dialog')와 다른 이유는 무엇입니까?" HTML을 보지 않고는 말할 수 없습니다. '# dialog'는'dialog'라는 클래스를 가지고 있습니까? 전의. '

' –

+2

사례 1의 경우 ID로 선택합니다. 케이스 2의 경우, 클래스별로 선택합니다. DOM에 따라 같은 요소를 반환하지 않을 수도 있습니다. – mhodges

+0

죄송합니다. HTML을 포함해야합니다. – user1032531

답변

1

$(this).parent('div.dialog')은 상위가 해당 선택 자와 일치하는지 확인하기 위해 한 단계 만 조회합니다. 더 이상 트래버스하지 않습니다. 결과는 빈 세트이므로 .dialog()을 사용하면 아무 효과가 없습니다.

여기서 작동하는 것은 closestjQuery API입니다.

$(this).closest('div.dialog') 

이 예에서는 $("#dialog")과 같습니다.

+0

. 나는'parents()'도 효과가 있다고 생각합니다. – user1032531

+1

'parents'도 작동하지만, 하나 이상의 일치가있는 경우 잘못 일치 할 수있는 세트를 반환합니다. 이 경우 모든 일치 항목을 가져올 필요가 없으므로 첫 번째 항목 만 사용하는 것이 더 합리적인 것처럼 보였습니다. –

+0

예,'closest()'이 가장 좋습니다. 감사. 이 대답을 선택하고 나 뒤에 이것을 얻을 수 있습니다! 나는'parent()'가 완전히 올라간 것으로 잘못 가정하고 내가 목격 한 것을 이해하지 못했습니다. – user1032531

관련 문제