Jquery empty() div, за исключением совпадающих элементов

Есть ли способ удалить div, оставляя только элементы с определенным именем класса? Или, есть ли способ удалить все элементы в div, оставляя только элементы с указанным классом?

Ответ 1

Это должно сделать трюк:

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

Пример разметки:

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

Ответ 2

Вот еще один вариант с использованием только селекторов jQuery:

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

Проблема с подобным методом и выше, если есть какие-либо дочерние элементы, они также будут удалены, например:

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

это также будет удалено: ( текст также будет удален, так как он соответствует подстановочному знаку * и не имеет класса className. это мы хотели бы только фильтровать прямые дочерние элементы родителя, например:

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

Ответ 3

@Marve путь, вероятно, лучше, но здесь все равно (используя filter):

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

Ответ 4

попробуйте это

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