2012-06-15 20 views
9

Ich habe ein DIV, das ich entfernen möchte, wenn ich auf einen Link in diesem DIV klicke. Hier ist, was ich habe:DIV entfernen bei Klick

<div id="clients-edit-wrapper"> 
    <div class="close-wrapper"> 
     <a href="#" class="close-div">Close</a> 
    </div> 
</div> 

Wenn ich auf „Schließen“ Ich will clients-edit-wrapper entfernt werden. Ich suche nach einer Möglichkeit, dies zu tun, indem ich auf den übergeordneten DIV des Close-Links verweisen, der in diesem Fall clients-edit-wrapper ist.

Jede Hilfe würde sehr geschätzt werden!


Antwort von Huangism unter:

$('.close-div').click(function(){ 
    $(this).parent().parent().remove(); 
}); 

Dies funktioniert nur, wenn das Element, das Sie entfernen möchten, auf zwei Eltern ist. In meinem Fall war genau das, was ich brauchte. Hier

+0

Ihre Antwort wird davon abhängen, ob Sie die div in einer relativen Weise gelöscht werden soll (über Eltern oder am nächsten) oder absolut (über id). – lucuma

+0

Es wird in relativer Weise (über Eltern) sein. – FastTrack

+1

In Bezug auf die angenommene Antwort. Verwenden Sie stattdessen 'on()'. 'live()' ist seit jQuery 1.7 veraltet. Wenn Sie jQuery 1.6 und früher verwenden, verwenden Sie 'delegate()' anstelle von 'live()'. Ich glaube der Grund ist hauptsächlich, dass 'live()' Speicherprobleme aufzeigte. Wenn Sie Version 1.3 und früher verwenden, benutzen Sie 'bind()'. 'bind()' wurde in 1.0 hinzugefügt, 'live()' in 1.3, 'delegate()' in 1.4.2 und 'on()' in 1.7. – Nope

Antwort

8

gegeben Ihre HTML-Markup

Aktualisiert()

$('.close-div').on('click', function(){ 
    $(this).parent().parent().remove(); 
}); 

tatsächlich verwenden, die am nächsten() -Methode, es zuverlässiger ist und eine bessere Logik .on. Damit können Sie mehr wickeln schließen-div und es wäre nicht

Von Vision Materie Antwort

$(this).closest("#clients-edit-wrapper").remove(); 

mehr Flexibilität

bearbeiten
(Hinzugefügt verwandte Ressourcen)
Bitte sehen jQuery Dokumentation auf live()

Ab jQuery 1.7 ist die .live() -Methode veraltet. Verwenden Sie .on() zu Ereignishandler anhängen. Benutzer älterer Versionen von jQuery sollten .delegate() anstelle von .live() verwenden.

Soweit ich weiß, ist dies auf Speicherprobleme/Probleme mit live() zurückzuführen.

+0

Das ist genau das, was ich gesucht habe. Danke Huangism! Ich werde als die richtige Antwort in 5 Minuten akzeptieren. – FastTrack

+0

@FastTrack sollten Sie am nächsten wie in Vision's Antwort verwenden, ist es logisch besser, flexibler – Huangism

+0

Huangism: Aber wenn ich Vision's Lösung verwenden würde, müsste ich mehrere Instanzen von $ (this) .closest ("# clients -edit-wrapper "). remove();' für jeden DIV, der einen '.close-div'-Link hat. – FastTrack

1
$('#clients-edit-wrapper').find('.close-div').click(function(){ 
    $('#clients-edit-wrapper').remove(); 
}); 
8

ist eine Lösung:

$(".close-div").on("click", function(event) { 
    $("#clients-edit-wrapper").remove(); 
    event.preventDefault(); 
}); 

#clients-edit-wrapper Element Um relativ zu .close-div Elemente, können Sie entweder parent().parent() oder closest mit ID:

$(this).parent().parent().remove();     // will do 
$(this).closest("#clients-edit-wrapper").remove(); // the same 

jedoch dem letzten doesn Es ist nicht sinnvoll, IDs von Seitenelementen sollten eindeutig sein, und es wird keine weiteren #clients-edit-wrapper geben.

1

Sie könnten auch closest verwenden.

$('.close-div').on('click', function(e) { 
    e.preventDefault(); 
    $('#clients-edit-wrapper').remove(); 
}); 
2
$(".close-div").click(function(){ 

    $("#clients-edit-wrapper").remove(); 

}); 
1

Da Sie das letzte Element der Eltern stützen, würde ich Ereignis-Delegation ermutigen:

$("#clients-edit-wrapper").on("click", ".close-div", function(e){ 
    e.preventDefault(); 
    $(e.delegateTarget).remove(); 
}); 
1
<div id="clients-edit-wrapper"> 
    <div class="close-wrapper"> 
     <a href="#" onclick="$('#clients-edit-wrapper').remove();" class="close-div">Close</a> 
    </div> 
</div> 
+1

Wer und warum hat der Typ -1? [Hier ist Jsfiddle, die zeigt, dass es den erforderlichen Weg funktioniert.] (Http://jsfiddle.net/Nz2JK/) +1 von mir. – Boro

+3

Ich habe über diese Antwort nicht gestimmt, jedoch ist die Vorgehensweise, JavaScript mit Markup zu mischen, verpönt. Es macht schwer zu verwaltenden Code. Besser ist es, alle Bindungen aus dem JavaScript zu machen und nicht aus Attributen wie 'onclick'. – Sampson

+0

Gute Antwort. Das Schreiben von Code in Markup ist hilfreich in Situationen wie diesen, in denen nicht viel getan werden muss. –