Есть ли способ удалить div, оставляя только элементы с определенным именем класса? Или, есть ли способ удалить все элементы в div, оставляя только элементы с указанным классом?
Jquery empty() 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();