Ответ 1
Это должно сделать трюк:
$('#YourDivId').contents().filter(function(){
return this.nodeType === 3;
}).remove();
Или используя функцию стрелки ES6:
$('#YourDivId').contents().filter((_, el) => el.nodeType === 3).remove();
Если вы хотите сделать ваш код более читабельным и вам нужна только поддержка IE9+, вы можете использовать константы типа узла. Лично я также выделю функцию фильтра и назову ее для повторного использования и еще большей читабельности:
let isTextNode = (_, el) => el.nodeType === Node.TEXT_NODE;
$('#YourDivId').contents().filter(isTextNode).remove();
Вот фрагмент со всеми примерами:
$('#container1').contents().filter(function() {
return this.nodeType === Node.TEXT_NODE;
}).remove();
$('#container2').contents().filter((_, el) => el.nodeType === Node.TEXT_NODE).remove();
let isTextNode = (_, el) => el.nodeType === Node.TEXT_NODE;
$('#container3').contents().filter(isTextNode).remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container1">
<h1>This shouldn't be removed.</h1>
This text should be removed.
<p>This shouldn't be removed either.</p>
This text should also be removed.
</div>
<div id="container2">
<h1>This shouldn't be removed.</h1>
This text should be removed.
<p>This shouldn't be removed either.</p>
This text should also be removed.
</div>
<div id="container3">
<h1>This shouldn't be removed.</h1>
This text should be removed.
<p>This shouldn't be removed either.</p>
This text should also be removed.
</div>