2017-04-11 2 views
1

Warum funktioniert der erste Versuch, den Dialog zu schließen, nicht? Oder vielleicht ist eine bessere Frage warum ist jQuery Objekt $("#dialog") anders als $(this).parent('div.dialog')?Wodurch unterscheiden sich jQuery-Objekte?

$('#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

Warum ist das jQuery-Objekt $ ("# dialog") anders als $ (this) .parent ('div.dialog')? " Unmöglich zu sagen, ohne den HTML zu sehen. Hat '# dialog' eine Klasse namens' dialog'? Ex. '

' –

+2

In Fall 1 wählen Sie nach ID. In Fall 2 wählen Sie nach Klasse aus. Sie können nicht das gleiche Element zurückgeben, abhängig von Ihrem DOM – mhodges

+0

Entschuldigung, ich hätte den HTML enthalten sollen. – user1032531

Antwort

1

$(this).parent('div.dialog') wird nur eine Ebene schauen, um zu sehen, ob die Eltern, daß der Wähler übereinstimmt. Es wird nicht weiter gehen. Das Ergebnis ist ein leerer Satz und daher hat die Verwendung von .dialog() keine Auswirkung.

Was würde hier funktionieren wäre closestjQuery API.

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

Dies würde die gleiche wie $("#dialog") in Ihrem Beispiel.

+0

Danke Travis. Ich denke, 'eltern()' wird auch funktionieren, nicht? – user1032531

+1

"Eltern" funktioniert auch, aber es wird ein Set zurückgeben, das dann falsch zusammenpassen könnte, wenn es mehrere Übereinstimmungen gäbe. Es ist auch nicht notwendig, in diesem Fall alle Übereinstimmungen zu erhalten, daher erschien es sinnvoller, nur die erste zu verwenden. –

+0

Ja, ich stimme zu, 'engste()' ist am besten. Vielen Dank. Kann warten, bis ich diese Antwort gewählt habe und sie hinter mich gebracht habe! Ich nahm fälschlicherweise an, dass eltern() den ganzen Weg hinauf ging und nicht verstand, was ich sah. – user1032531

Verwandte Themen