jQuery:如何删除文本但不删除子元素

ane*_*yzm 27 jquery

我可以用jQuery删除节点中的文本但不删除子元素吗?

谢谢

Nit*_*rpe 53

从某些div删除所有文本元素的最佳和简单的解决方案是

$("#firstDiv").contents().filter(function(){
    return (this.nodeType == 3);
}).remove();
Run Code Online (Sandbox Code Playgroud)

  • 优秀的解决方 适合我. (3认同)

Nan*_*488 8

这对我有用:

$(elem).html($(elem).html().replace($(elem).text(),''));
Run Code Online (Sandbox Code Playgroud)

这设置了没有文本内容的html内容,这意味着elem中的任何html标签都将保持不变.

之前:

<div>Hello<input type="text" name="username" value="world!"/></div>
Run Code Online (Sandbox Code Playgroud)

后:

<div><input type="text" name="username" value="world!"/></div>
Run Code Online (Sandbox Code Playgroud)

再见

  • 请添加一些解释. (2认同)
  • 这有一些问题:1) 使用诸如替换之类的字符串函数编辑 HTML 会破坏标记(例如,如果文本是 ' ' 或 '"'),2) 任何与文本匹配的内容都会被替换(例如,如果文本是 'user' 然后 name 属性会改变),3)如果文本在孩子之间传播,它将不起作用(例如“&lt;div&gt;Hello&lt;br /&gt;World&lt;/div&gt;”) (2认同)

Rud*_*ism 7

这是我的想法:

function removeText(element){
  var newElement = $('<' + element[0].nodeName + '/>');
  for(i=0; i < item.attributes.length; i++) {
    newElement.attr(item.attributes[i].name, item.attributes[i].value);
  } 
  element.children().each(function(){
    newElement.append(this);
  });
  element.replaceWith(newElement);
}
Run Code Online (Sandbox Code Playgroud)

  • function stripText(element){var item = element [0]; var newElement = $('<'+ item.nodeName +'/>'); for(i = 0; i <item.attributes.length; i ++){newElement.attr(item.attributes [i] .name,item.attributes [i] .value); } element.children().each(function(){newElement.append(this);}); element.replaceWith(为newElement); return newElement; } (3认同)