Jquery - 仅从div中删除文本内容

时间:2010-08-06 08:11:47

标签: jquery

是否可以从div中删除文本内容,即保留所有其他元素不变,只删除直接位于div中的文本?

6 个答案:

答案 0 :(得分:73)

这应该可以解决问题:

$('#YourDivId').contents().filter(function(){
    return this.nodeType === 3;
})​.remove();​

或使用ES6箭头功能:

$('#YourDivId').contents().filter((_, el) => el.nodeType === 3).remove();

如果您想让您的代码更具可读性,而您只需要支持IE9 +,则可以使用node type constants。就个人而言,我还将过滤功能拆分并命名,以便重复使用,甚至更好的可读性:

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>

答案 1 :(得分:11)

假设以下HTML结构:

<div class="element-to-clean">
  Content to be filtered out.
  <span class="element-to-leave-intact">
    Content to be left inthe element.
  </span>
</div>

您可以使用以下JavaScript + jQuery 2.1代码实现所需的行为:

$('.element-to-clean').html($('.element-to-clean').children());

答案 2 :(得分:3)

你可以用简单的dom:

来做
var div=$("div")[0];
if(div.childNodes.length)
   for(var i=0;i<div.childNodes.length;i++)
   {
       if(div.childNodes[i].nodeType===3)
           div.removeChild(div.childNodes[i]);
   }

答案 3 :(得分:2)

最简单的方法是:

$('#div').html($('<div>').append($('*', '#div')).html());

答案 4 :(得分:2)

嗯这可能不是最好的方法,但我在一个变量中保存了div然后在我删除了标签中的所有内容后我使用了追加:

$('.wpcf7 form p').each(function(i){
    var el = $(this).find('span');
    if(i==4)
    el = $(this).find('input');
    $(this).empty();
    $(this).append(el);
});

答案 5 :(得分:-6)

$('#yourDiv').text(''); 

这将删除您的文字内容