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

相关问题