2009-08-11 9 views
11

Gibt es eine Möglichkeit, ein div zu leeren, so dass nur Elemente mit einem bestimmten Klassennamen übrig bleiben? Oder gibt es eine Möglichkeit, alle Elemente innerhalb eines div zu entfernen, so dass nur Elemente mit einer bestimmten Klasse übrig bleiben?Jquery empty() div außer passenden Elementen

+0

wenn Marve Antwort das Problem löst man es annehmen sollte, indem Sie das Häkchen in der Nähe seiner Antwort klicken. – SilentGhost

Antwort

39

Diese den Trick tun sollten versuchen Sie dies

$('#theDiv').find('*:not(".className")').remove(); 
+0

@Jason - Ich bin ganz auf Marves Antwort - aber was ist, wenn beide funktionieren? Er sollte die Antwort akzeptieren, die für ihn am nützlichsten ist. – karim79

1

@ Weg Marve ist wahrscheinlich besser, aber hier ist sowieso eine andere (mit filter):

$('#theDiv').find('*').not('.className').remove(); 

Beispiel Markup:

<div id="theDiv"> 
    <p>this will be removed</p> 
    <p class="className">this will stay</p> 
</div> 
1

$("#yourDiv").html($('#yourDiv').filter('.IWantThisClass, .IWantThisToo').html()); 
2

Hier ist eine weitere Option mit nur jQuery Selektoren:

$("#theDiv *:not('.className')").remove(); 

Das Problem mit einem Verfahren wie diesem und über denen, wenn es irgendwelche untergeordneten Elemente sind, werden sie zum Beispiel auch entfernt werden:

<div id="theDiv"> 
    <p>this will be removed</p> 
    <p class="className"><strong>this will also be removed :(</strong></p> 
</div> 

Das Dies wird auch entfernt :( Text wird auch entfernt, da es die Wildcard * entspricht und nicht die Klasse Klassenname hat. Um dies zu lösen, wir wollen nur direkte Kinder der Eltern filtern, wie zB:

$("#theDiv > *:not('.className')").remove(); 
+1

Danke. Diese Antwort ist viel besser als die angenommene IMO. – Demnogonis

Verwandte Themen