2017-04-11 91 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

謝謝特拉維斯。我認爲'父母()'也會工作,不是嗎? – user1032531

+1

'父母'也可以工作,但它會返回一個集合,如果有多個匹配,那麼這個集合可能會錯誤匹配。在這種情況下也沒有必要得到所有的匹配,所以只使用第一個匹配似乎更有意義。 –

+0

是的,我同意'最接近()'是最好的。謝謝。可以等待選擇這個答案,並把它放在我身後!我錯誤地認爲「父母()」一路走來,不明白我目睹的是什麼。 – user1032531

相關問題